From 6d2a1a002b33bf16a54aa69adbf0d9515a621efc Mon Sep 17 00:00:00 2001 From: shmyga Date: Wed, 28 Mar 2018 16:38:16 +0300 Subject: [PATCH] [ansible] added deploy role --- ansible/ansible.cfg | 4 ++++ ansible/deploy.yml | 3 +++ ansible/group_vars/all.yml | 3 +++ ansible/roles/deploy/tasks/main.yml | 19 +++++++++++++++ ansible/roles/deploy/tasks/npm.yml | 21 +++++++++++++++++ ansible/roles/deploy/tasks/repo.yml | 17 ++++++++++++++ ansible/roles/deploy/vars/main.yml | 5 ++++ ansible/roles/service/tasks/main.yml | 5 ---- ansible/roles/service/template/tankz.j2 | 16 ------------- ansible/roles/service/vars/main.yml | 3 --- ansible/roles/setup/tasks/apt.yml | 10 ++++++++ ansible/roles/setup/tasks/main.yml | 6 +++++ ansible/roles/setup/tasks/npm.yml | 4 ++++ ansible/roles/setup/tasks/service.yml | 10 ++++++++ ansible/roles/setup/template/service.j2 | 15 ++++++++++++ ansible/roles/setup/vars/main.yml | 9 +++++++ ansible/setup.yml | 2 +- build/server.js | 2 +- capfile | 11 --------- config/config.rb | 16 ------------- config/deploy.rb | 31 ------------------------- config/deploy/dev.rb | 11 --------- config/deploy/prod.rb | 13 ----------- config/npm.rb | 24 ------------------- gemfile | 6 ----- gulpfile.js | 2 +- 26 files changed, 129 insertions(+), 139 deletions(-) create mode 100644 ansible/deploy.yml create mode 100644 ansible/group_vars/all.yml create mode 100644 ansible/roles/deploy/tasks/main.yml create mode 100644 ansible/roles/deploy/tasks/npm.yml create mode 100644 ansible/roles/deploy/tasks/repo.yml create mode 100644 ansible/roles/deploy/vars/main.yml delete mode 100644 ansible/roles/service/tasks/main.yml delete mode 100644 ansible/roles/service/template/tankz.j2 delete mode 100644 ansible/roles/service/vars/main.yml create mode 100644 ansible/roles/setup/tasks/apt.yml create mode 100644 ansible/roles/setup/tasks/main.yml create mode 100644 ansible/roles/setup/tasks/npm.yml create mode 100644 ansible/roles/setup/tasks/service.yml create mode 100644 ansible/roles/setup/template/service.j2 create mode 100644 ansible/roles/setup/vars/main.yml delete mode 100644 capfile delete mode 100644 config/config.rb delete mode 100644 config/deploy.rb delete mode 100644 config/deploy/dev.rb delete mode 100644 config/deploy/prod.rb delete mode 100644 config/npm.rb delete mode 100644 gemfile diff --git a/ansible/ansible.cfg b/ansible/ansible.cfg index be1e477..c446be2 100644 --- a/ansible/ansible.cfg +++ b/ansible/ansible.cfg @@ -1,2 +1,6 @@ [defaults] hash_behaviour = merge +host_key_checking = False + +[ssh_connection] +ssh_args = -o ForwardAgent=yes \ No newline at end of file diff --git a/ansible/deploy.yml b/ansible/deploy.yml new file mode 100644 index 0000000..e62b931 --- /dev/null +++ b/ansible/deploy.yml @@ -0,0 +1,3 @@ +- hosts: all + roles: + - deploy diff --git a/ansible/group_vars/all.yml b/ansible/group_vars/all.yml new file mode 100644 index 0000000..31caa88 --- /dev/null +++ b/ansible/group_vars/all.yml @@ -0,0 +1,3 @@ +project_name: "tankz" +project_smartname: "Tank'z" +project_dir: "/home/holop/{{ project_name }}" \ No newline at end of file diff --git a/ansible/roles/deploy/tasks/main.yml b/ansible/roles/deploy/tasks/main.yml new file mode 100644 index 0000000..cb97045 --- /dev/null +++ b/ansible/roles/deploy/tasks/main.yml @@ -0,0 +1,19 @@ +- import_tasks: repo.yml +- import_tasks: npm.yml + +- name: Copy config.json + copy: + src: "{{ release_dir }}/config.shmyga.ru.json" + dest: "{{ release_dir }}/config.json" + remote_src: true + +- name: Gulp build + command: "gulp default" + args: + chdir: "{{ release_dir }}" + +- name: Create symlink to release + file: + src: "{{ release_dir }}" + dest: "{{ project_dir }}/current" + state: link \ No newline at end of file diff --git a/ansible/roles/deploy/tasks/npm.yml b/ansible/roles/deploy/tasks/npm.yml new file mode 100644 index 0000000..3e2d913 --- /dev/null +++ b/ansible/roles/deploy/tasks/npm.yml @@ -0,0 +1,21 @@ +- name: Create directory for node_modules + file: + path: "{{ project_dir }}/npm" + state: directory + +- name: Copy package.json + copy: + src: "{{ release_dir }}/package.json" + dest: "{{ project_dir }}/npm/" + remote_src: true + +- name: npm install + command: npm install + args: + chdir: "{{ project_dir }}/npm/" + +- name: Create symlink to node_modules + file: + src: "{{ project_dir }}/npm/node_modules" + dest: "{{ release_dir }}/node_modules" + state: link \ No newline at end of file diff --git a/ansible/roles/deploy/tasks/repo.yml b/ansible/roles/deploy/tasks/repo.yml new file mode 100644 index 0000000..467effe --- /dev/null +++ b/ansible/roles/deploy/tasks/repo.yml @@ -0,0 +1,17 @@ +- name: Update git repository + git: + repo: "{{ repo_url }}" + dest: "{{ project_dir }}/repo" + +- name: Creates directory for release + file: + path: "{{ release_dir }}" + state: directory + +- name: Copy project files + synchronize: + src: "{{ project_dir }}/repo/" + dest: "{{ release_dir }}" + rsync_opts: + - "--exclude=.git" + delegate_to: "{{ inventory_hostname }}" \ No newline at end of file diff --git a/ansible/roles/deploy/vars/main.yml b/ansible/roles/deploy/vars/main.yml new file mode 100644 index 0000000..3d9e874 --- /dev/null +++ b/ansible/roles/deploy/vars/main.yml @@ -0,0 +1,5 @@ +ansible_user: holop +date_str: "{{ ansible_date_time.year }}{{ ansible_date_time.month }}{{ ansible_date_time.day }}{{ ansible_date_time.hour }}{{ ansible_date_time.minute }}{{ ansible_date_time.second }}" + +repo_url: "git@bitbucket.org:infernalgames/{{ project_name }}.git" +release_dir: "{{ project_dir }}/releases/{{ date_str }}" diff --git a/ansible/roles/service/tasks/main.yml b/ansible/roles/service/tasks/main.yml deleted file mode 100644 index 96d832d..0000000 --- a/ansible/roles/service/tasks/main.yml +++ /dev/null @@ -1,5 +0,0 @@ -- name: install tankz systemd unit file - template: src=template/tankz.j2 dest=/etc/systemd/system/tankz.service - -- name: start tankz - systemd: state=started name=tankz daemon_reload=yes \ No newline at end of file diff --git a/ansible/roles/service/template/tankz.j2 b/ansible/roles/service/template/tankz.j2 deleted file mode 100644 index 37dddcb..0000000 --- a/ansible/roles/service/template/tankz.j2 +++ /dev/null @@ -1,16 +0,0 @@ -[Unit] -Description=Tank'z game server - -[Service] -Type=simple -PIDFile=/var/run/tankz.pid -WorkingDirectory=/home/holop/repo/tankz/current/target -User=www-data -Group=www-data -ExecStart=/usr/bin/neko /home/holop/repo/tankz/current/target/tankz.n -TimeoutSec=300 -Restart=always - - -[Install] -WantedBy=multi-user.target \ No newline at end of file diff --git a/ansible/roles/service/vars/main.yml b/ansible/roles/service/vars/main.yml deleted file mode 100644 index 57b4f52..0000000 --- a/ansible/roles/service/vars/main.yml +++ /dev/null @@ -1,3 +0,0 @@ -ansible_become: yes -ansible_user: barin -ansible_become_pass: 1234!QAZ \ No newline at end of file diff --git a/ansible/roles/setup/tasks/apt.yml b/ansible/roles/setup/tasks/apt.yml new file mode 100644 index 0000000..b54c6fb --- /dev/null +++ b/ansible/roles/setup/tasks/apt.yml @@ -0,0 +1,10 @@ +- name: Install the package "Neko" + apt: + name: 'neko' + +- name: Install the package "Node" + apt: + name: '{{ item }}' + with_items: + - nodejs + - npm diff --git a/ansible/roles/setup/tasks/main.yml b/ansible/roles/setup/tasks/main.yml new file mode 100644 index 0000000..a4379bc --- /dev/null +++ b/ansible/roles/setup/tasks/main.yml @@ -0,0 +1,6 @@ +- import_tasks: apt.yml + when: ansible_distribution|lower == 'ubuntu' + +- import_tasks: npm.yml + +- import_tasks: service.yml diff --git a/ansible/roles/setup/tasks/npm.yml b/ansible/roles/setup/tasks/npm.yml new file mode 100644 index 0000000..45f23b7 --- /dev/null +++ b/ansible/roles/setup/tasks/npm.yml @@ -0,0 +1,4 @@ +- name: Install "gulp-cli" node.js package globally. + npm: + name: gulp-cli + global: yes \ No newline at end of file diff --git a/ansible/roles/setup/tasks/service.yml b/ansible/roles/setup/tasks/service.yml new file mode 100644 index 0000000..3a62b2c --- /dev/null +++ b/ansible/roles/setup/tasks/service.yml @@ -0,0 +1,10 @@ +- name: "install {{ service_name }} systemd unit file" + template: + src: "template/service.j2" + dest: "/etc/systemd/system/{{ service_name }}.service" + +- name: "start {{ service_name }} service" + systemd: + state: started + name: "{{ service_name }}" + daemon_reload: yes diff --git a/ansible/roles/setup/template/service.j2 b/ansible/roles/setup/template/service.j2 new file mode 100644 index 0000000..cb9b721 --- /dev/null +++ b/ansible/roles/setup/template/service.j2 @@ -0,0 +1,15 @@ +[Unit] +Description={{ service_description }} + +[Service] +Type=simple +PIDFile=/var/run/{{ service_name }}.pid +WorkingDirectory={{ service_work_dir }} +User={{ service_user }} +Group={{ service_user }} +ExecStart={{ service_command }} +TimeoutSec=300 +Restart=always + +[Install] +WantedBy=multi-user.target \ No newline at end of file diff --git a/ansible/roles/setup/vars/main.yml b/ansible/roles/setup/vars/main.yml new file mode 100644 index 0000000..3e73dcc --- /dev/null +++ b/ansible/roles/setup/vars/main.yml @@ -0,0 +1,9 @@ +ansible_become: yes +ansible_user: barin +ansible_become_pass: 1234!QAZ + +service_name: "{{ project_name }}" +service_description: "{{ project_smartname }} server" +service_work_dir: "{{ project_dir }}/current/target" +service_command: "/usr/bin/neko {{ project_dir }}/current/target/{{ project_name }}.n" +service_user: www-data diff --git a/ansible/setup.yml b/ansible/setup.yml index cfde54e..6a3589a 100644 --- a/ansible/setup.yml +++ b/ansible/setup.yml @@ -1,3 +1,3 @@ - hosts: all roles: - - service + - setup diff --git a/build/server.js b/build/server.js index 4d1a2f7..4b75073 100755 --- a/build/server.js +++ b/build/server.js @@ -46,4 +46,4 @@ const test = (build) => function test() { exports['server'] = gulp.series(prepare(Haxe.ID), generate(), build()); -exports['server:test'] = gulp.series(prepare(Haxe.ID, FlashPlayer.ID), generate(), test(build())); +exports['server:test'] = gulp.series(prepare(Haxe.ID), generate(), test(build())); diff --git a/capfile b/capfile deleted file mode 100644 index ea45d00..0000000 --- a/capfile +++ /dev/null @@ -1,11 +0,0 @@ -require 'capistrano/setup' -require 'capistrano/deploy' -require 'capistrano/scm/git' -install_plugin Capistrano::SCM::Git -require 'capistrano/scm/git-with-submodules' -install_plugin Capistrano::SCM::Git::WithSubmodules -require 'capistrano/npm' -require 'capistrano/gulp' -require 'airbrussh/capistrano' - -Dir.glob('lib/capistrano/tasks/*.rake').each { |r| import r } diff --git a/config/config.rb b/config/config.rb deleted file mode 100644 index 13d1b9f..0000000 --- a/config/config.rb +++ /dev/null @@ -1,16 +0,0 @@ -set :config_role, :app -set :config_path, -> { release_path } -set :config_type, 'json' - - -namespace :config do - task :setup do - config_role = fetch(:config_role) - config_path = fetch(:config_path) - config_type = fetch(:config_type) - on roles(config_role) do |server| - # stage = fetch(:stage) - execute "cd #{config_path} && cp config.#{server.hostname}.#{config_type} config.#{config_type}" - end - end -end \ No newline at end of file diff --git a/config/deploy.rb b/config/deploy.rb deleted file mode 100644 index a09244b..0000000 --- a/config/deploy.rb +++ /dev/null @@ -1,31 +0,0 @@ -require_relative 'npm' -require_relative 'config' - -app = 'tankz' -user = 'holop' - -# git -set :application, app -set :repo_url, "git@bitbucket.org:infernalgames/#{app}.git" -set :user, user -set :deploy_to, "/home/#{user}/repo/#{app}" - -# airbrussh -set :format, :airbrussh -set :format_options, command_output: false - -# config -before 'deploy:updated', 'config:setup' - -# npm -set :npm_target_path, -> { "/home/#{fetch(:user)}/npm" } -set :npm_flags, '--silent --no-spin' -set :npm_roles, :web -set :npm_env_variables, {} - -# gulp -set :gulp_target_path, -> { release_path } -set :gulp_tasks, 'default' -set :gulp_flags, '--no-color' -set :gulp_roles, :web -before 'deploy:updated', 'gulp' diff --git a/config/deploy/dev.rb b/config/deploy/dev.rb deleted file mode 100644 index f14e688..0000000 --- a/config/deploy/dev.rb +++ /dev/null @@ -1,11 +0,0 @@ -role :app, %w{localhost} -role :web, %w{localhost} -role :db, %w{localhost} - -#set :user, ENV['USER'] -user = fetch(:user) - -server 'localhost', ssh_options: { port: 22, user: user, forward_agent: true } - -set :tmp_dir, "/home/#{user}/tmp" -set :branch, 'master' diff --git a/config/deploy/prod.rb b/config/deploy/prod.rb deleted file mode 100644 index 15a56ef..0000000 --- a/config/deploy/prod.rb +++ /dev/null @@ -1,13 +0,0 @@ -# host = '94.130.110.9' -host = 'shmyga.ru' - -role :app, host -role :web, host -role :db, host - -user = fetch(:user) - -server host, ssh_options: { port: 22, user: user, forward_agent: true } - -set :tmp_dir, "/home/#{user}/tmp" -set :branch, 'master' diff --git a/config/npm.rb b/config/npm.rb deleted file mode 100644 index 38d37a8..0000000 --- a/config/npm.rb +++ /dev/null @@ -1,24 +0,0 @@ -set :npm_path, -> { release_path } - -namespace :npm do - task :prepare do - npm_roles = fetch(:npm_roles) - on roles(npm_roles) do - npm_target_path = fetch(:npm_target_path) - npm_path = fetch(:npm_path) - execute "mkdir -p #{npm_target_path}" - execute "cp #{npm_path}/package.json #{npm_target_path}" - end - end - task :link do - npm_roles = fetch(:npm_roles) - on roles(npm_roles) do - npm_target_path = fetch(:npm_target_path) - npm_path = fetch(:npm_path) - execute "ln -s #{npm_target_path}/node_modules #{npm_path}/" - end - end -end - -before 'npm:install', 'npm:prepare' -after 'npm:install', 'npm:link' \ No newline at end of file diff --git a/gemfile b/gemfile deleted file mode 100644 index 09d5843..0000000 --- a/gemfile +++ /dev/null @@ -1,6 +0,0 @@ -source 'https://rubygems.org' -gem 'capistrano', '~> 3.7.0' -gem 'capistrano-git-with-submodules', '~> 2.0' -gem 'capistrano-npm' -gem 'capistrano-gulp' -gem 'airbrussh', :require => false \ No newline at end of file diff --git a/gulpfile.js b/gulpfile.js index 7e45d34..2d20b23 100755 --- a/gulpfile.js +++ b/gulpfile.js @@ -33,4 +33,4 @@ merge('./build/editor'); merge('./build/server'); -exports.default = gulp.series(exports.clean, exports.client); \ No newline at end of file +exports.default = gulp.series(exports.clean, exports.client, exports.server); \ No newline at end of file