From 159df176f990fd1f819efcfd431677b78f367697 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Isma=C3=ABl=20Bouya?= Date: Sun, 18 Feb 2018 15:30:02 +0100 Subject: [PATCH] Install and configure api and assets --- modules/role/manifests/cryptoportfolio.pp | 157 ++++++++++++++---- .../cryptoportfolio/api_conf.toml.erb | 16 ++ .../cryptoportfolio-app.service.erb | 14 ++ .../cryptoportfolio/static_conf.env.erb | 4 + 4 files changed, 159 insertions(+), 32 deletions(-) create mode 100644 modules/role/templates/cryptoportfolio/api_conf.toml.erb create mode 100644 modules/role/templates/cryptoportfolio/cryptoportfolio-app.service.erb create mode 100644 modules/role/templates/cryptoportfolio/static_conf.env.erb diff --git a/modules/role/manifests/cryptoportfolio.pp b/modules/role/manifests/cryptoportfolio.pp index 046b79e..0f26527 100644 --- a/modules/role/manifests/cryptoportfolio.pp +++ b/modules/role/manifests/cryptoportfolio.pp @@ -5,23 +5,43 @@ class role::cryptoportfolio { $password_seed = lookup("base_installation::puppet_pass_seed") |$key| { {} } - postgresql::server::db { 'cryptoportfolio': - user => 'cryptoportfolio', - password => postgresql_password('cryptoportfolio', generate_password(24, $password_seed, "postgres_cryptoportfolio")), + $cf_pg_user = "cryptoportfolio" + $cf_pg_db = "cryptoportfolio" + $cf_pg_password = generate_password(24, $password_seed, "postgres_cryptoportfolio") + $cf_pg_host = "localhost:5432" + + $cf_user = "cryptoportfolio" + $cf_group = "cryptoportfolio" + $cf_home = "/opt/cryptoportfolio" + $cf_env = "prod" + $cf_front_app_host = "cryptoportfolio.immae.eu" + $cf_front_app_port = "" + $cf_front_app_ssl = "false" + $cf_front_app = "${cf_home}/go/src/immae.eu/Immae/Projets/Cryptomonnaies/Cryptoportfolio/Front" + $cf_front_app_api_workdir = "${cf_front_app}/cmd/app" + $cf_front_app_api_bin = "${cf_front_app_api_workdir}/cryptoportfolio-app" + $cf_front_app_api_conf = "${cf_home}/conf.toml" + $cf_front_app_api_secret = generate_password(24, $password_seed, "cryptoportfolio_api_secret") + + $cf_front_app_static_conf = "${cf_front_app}/cmd/web/env/prod.env" + + postgresql::server::db { $cf_pg_db: + user => $cf_pg_user, + password => postgresql_password($cf_pg_user, $cf_pg_password) } postgresql::server::pg_hba_rule { 'allow localhost TCP access to cryptoportfolio user': type => 'host', - database => 'cryptoportfolio', - user => 'cryptoportfolio', + database => $cf_pg_db, + user => $cf_pg_user, address => '127.0.0.1/32', auth_method => 'md5', order => "b0", } postgresql::server::pg_hba_rule { 'allow localhost ip6 TCP access to cryptoportfolio user': type => 'host', - database => 'cryptoportfolio', - user => 'cryptoportfolio', + database => $cf_pg_db, + user => $cf_pg_user, address => '::1/128', auth_method => 'md5', order => "b0", @@ -29,18 +49,16 @@ class role::cryptoportfolio { class { 'nginx': } - nginx::resource::server { 'cryptoportfolio.immae.eu': + nginx::resource::server { $cf_front_app_host: listen_port => 80, proxy => 'http://localhost:8000', } - ensure_packages(["go", "npm", "nodejs", "yarn"]) - - user { "cryptoportfolio": - name => "cryptoportfolio", + user { $cf_user: + name => $cf_user, ensure => "present", managehome => true, - home => "/opt/cryptoportfolio", + home => $cf_home, system => true, password => '!!', } @@ -49,37 +67,112 @@ class role::cryptoportfolio { $front_sha256 = lookup("cryptoportfolio::front_sha256") |$key| { {} } unless empty($front_version) { - file { "/opt/cryptoportfolio/front": - ensure => directory, - mode => "0700", - owner => "cryptoportfolio", - group => "cryptoportfolio", - } + ensure_packages(["go", "npm", "nodejs", "yarn"]) - file { "/opt/cryptoportfolio/front/${front_version}": - ensure => directory, + file { [ + "${cf_home}/go/", + "${cf_home}/go/src", + "${cf_home}/go/src/immae.eu", + "${cf_home}/go/src/immae.eu/Immae", + "${cf_home}/go/src/immae.eu/Immae/Projets", + "${cf_home}/go/src/immae.eu/Immae/Projets/Cryptomonnaies", + "${cf_home}/go/src/immae.eu/Immae/Projets/Cryptomonnaies/Cryptoportfolio", + $cf_front_app]: + ensure => "directory", mode => "0700", - owner => "cryptoportfolio", - group => "cryptoportfolio", - require => File["/opt/cryptoportfolio/front"], + owner => $cf_user, + group => $cf_group, + require => User[$cf_user], } - archive { "/opt/cryptoportfolio/front/${front_version}.tar.gz": - path => "/opt/cryptoportfolio/front/${front_version}.tar.gz", + archive { "${cf_home}/${front_version}.tar.gz": + path => "${cf_home}/${front_version}.tar.gz", source => "https://git.immae.eu/releases/cryptoportfolio/front/front_${front_version}.tar.gz", - creates => "/opt/cryptoportfolio/front/${front_version}/README.md", checksum_type => "sha256", checksum => $front_sha256, cleanup => false, extract => true, - extract_path => "/opt/cryptoportfolio/front/${front_version}", - require => File["/opt/cryptoportfolio/front/${front_version}"], + user => "cryptoportfolio", + extract_path => $cf_front_app, + require => [User[$cf_user], File[$cf_front_app]], } - file { "/opt/cryptoportfolio/front/current": + file { "${cf_home}/front": ensure => "link", - target => "/opt/cryptoportfolio/front/${front_version}", - require => Archive["/opt/cryptoportfolio/front/${front_version}.tar.gz"] + target => $cf_front_app, + require => Archive["/opt/cryptoportfolio/${front_version}.tar.gz"] + } + + exec { "go-get-dep": + user => $cf_user, + environment => ["HOME=${cf_home}"], + creates => "${cf_home}/go/bin/dep", + command => "/usr/bin/go get -u github.com/golang/dep/cmd/dep", + require => User[$cf_user], + } + + exec { "go-cryptoportfolio-dependencies": + cwd => $cf_front_app, + user => $cf_user, + environment => ["HOME=${cf_home}"], + creates => "${cf_front_app}/vendor", + command => "${cf_home}/go/bin/dep ensure", + require => [Exec["go-get-dep"], Archive["${cf_home}/${front_version}.tar.gz"]], + } + + exec { "go-cryptoportfolio-app": + cwd => $cf_front_app_api_workdir, + user => $cf_user, + environment => ["HOME=${cf_home}"], + creates => $cf_front_app_api_bin, + command => "/usr/bin/make build", + require => Exec["go-cryptoportfolio-dependencies"], + } + + file { "/etc/systemd/system/cryptoportfolio-app.service": + mode => "0644", + owner => "root", + group => "root", + content => template("role/cryptoportfolio/cryptoportfolio-app.service.erb"), + } ~> exec { 'systemctl deamon-reload': + command => '/usr/bin/systemctl daemon-reload', + refreshonly => true + } + + service { 'cryptoportfolio-app': + enable => true, + ensure => "running", + require => [File["/etc/systemd/system/cryptoportfolio-app.service"]], + } + + file { $cf_front_app_api_conf: + owner => $cf_user, + group => $cf_group, + mode => "0600", + content => template("role/cryptoportfolio/api_conf.toml.erb"), + } + + file { $cf_front_app_static_conf: + owner => $cf_user, + group => $cf_group, + mode => "0600", + content => template("role/cryptoportfolio/static_conf.env.erb"), + } + + exec { "web-cryptoportfolio-dependencies": + cwd => "${cf_front_app}/cmd/web", + environment => ["HOME=${cf_home}"], + command => "/usr/bin/make install", + creates => "${cf_front_app}/cmd/web/node_modules", + require => [Package["npm"], Package["nodejs"], Package["yarn"]] + } + + exec { "web-cryptoportfolio-build": + cwd => "${cf_front_app}/cmd/web", + environment => ["HOME=${cf_home}"], + command => "/usr/bin/make static ENV=${cf_env}", + creates => "${cf_front_app}/cmd/web/build/static", + require => [File[$cf_front_app_static_conf], Exec["web-cryptoportfolio-dependencies"]] } } diff --git a/modules/role/templates/cryptoportfolio/api_conf.toml.erb b/modules/role/templates/cryptoportfolio/api_conf.toml.erb new file mode 100644 index 0000000..13550c9 --- /dev/null +++ b/modules/role/templates/cryptoportfolio/api_conf.toml.erb @@ -0,0 +1,16 @@ +log_level="info" +mode="<%= @cf_env %>" +log_out="stdout" + +[db] +user="<%= @cf_pg_user %>" +password="<%= @cf_pg_password %>" +database="<%= @cf_pg_db %>" +address="<%= @cf_pg_host %>" + +[api] +domain="<%= @cf_front_app_host %>" +jwt_secret="<%= @cf_front_app_api_secret %>" + +[app] +public_dir="../web/build/static" diff --git a/modules/role/templates/cryptoportfolio/cryptoportfolio-app.service.erb b/modules/role/templates/cryptoportfolio/cryptoportfolio-app.service.erb new file mode 100644 index 0000000..a521c0e --- /dev/null +++ b/modules/role/templates/cryptoportfolio/cryptoportfolio-app.service.erb @@ -0,0 +1,14 @@ +[Unit] +Description=Cryptoportfolio app + +[Service] +Type=simple + +WorkingDirectory=<%= @cf_front_app_api_workdir %> +User=<%= @cf_user %> +Group=<%= @cf_group %> +UMask=007 + +ExecStart=<%= @cf_front_app_api_bin %> -conf <%= @cf_front_app_api_conf %> + +Restart=on-failure diff --git a/modules/role/templates/cryptoportfolio/static_conf.env.erb b/modules/role/templates/cryptoportfolio/static_conf.env.erb new file mode 100644 index 0000000..db9759d --- /dev/null +++ b/modules/role/templates/cryptoportfolio/static_conf.env.erb @@ -0,0 +1,4 @@ +API_HOST="<%= @cf_front_app_host %>" +API_PORT="<%= @cf_front_app_port %>" +API_HTTPS="<%= @cf_front_app_ssl %>" + -- 2.41.0