diff --git a/example.yml b/example.yml new file mode 100644 index 0000000..869946c --- /dev/null +++ b/example.yml @@ -0,0 +1,19 @@ +ghost: + - name: dryusdan.space + account: dryusdan_space + home: /opt/dryusdan_space + url: dryusdan.space + ghost_host: 127.0.0.1 + ghost_port: 7777 + db_host: 127.0.0.1 + db_port: 3306 + db_user: dryusdanspace + db_password: Password + db: dryusdanspace + email_send: True + email_from: contact@dryusdan.fr + email_host: 127.0.0.1 + email_port: 587 + email_user: contact@dryusdan.fr + email_pass: Password + diff --git a/tasks/main.yml b/tasks/main.yml new file mode 100644 index 0000000..10fdf18 --- /dev/null +++ b/tasks/main.yml @@ -0,0 +1,185 @@ +--- +- name: "Add ghost user" + user: + name: "{{ item.account }}" + shell: "/bin/false" + home: "{{ item.home }}" + loop: "{{ ghost }}" + when: ghost_deploy_site in item.name + +- name: "Add www directory" + file: + path: "{{ item.home }}/www" + state: directory + mode: 0755 + owner: "{{ item.account }}" + group: "{{ item.account }}" + loop: "{{ ghost }}" + become: yes + become_user : "{{ item.account }}" + when: ghost_deploy_site in item.key + +- name: "Add blog log directory" + file: + path: "/var/log/ghost/" + state: directory + mode: 0755 + +- name: "Add blog log directory" + file: + path: "/var/log/ghost/{{ item.name }}/" + state: directory + mode: 0755 + owner: "{{ item.account }}" + group: "{{ item.account }}" + loop: "{{ ghost }}" + when: ghost_deploy_site in item.key + +- name: "Download Ghost" + get_url: + url: "https://github.com/TryGhost/Ghost/releases/download/{{ version }}/Ghost-{{ version }}.zip" + dest: "{{ item.home }}/ghost-latest.zip" + mode: 0440 + loop: "{{ ghost }}" + become: yes + become_user : "{{ item.account }}" + when: ghost_deploy_site in item.key + +- name: "Delete www" + file: + path: "{{ item.home }}/www" + state: absent + loop: "{{ ghost }}" + when: ghost_deploy_site in item.key + +- name: "Unzip Ghost" + shell: "unzip -o ghost-latest.zip -d www" + args: + chdir: "{{ item.home }}/" + loop: "{{ ghost }}" + become: yes + become_user : "{{ item.account }}" + when: ghost_deploy_site in item.key + +- name: "Unzip content folder Ghost" + shell: "unzip -o ghost-latest.zip 'content/*' -d ./" + args: + chdir: "{{ item.home }}/" + with_dict: "{{ ghost }}" + become: yes + become_user : "{{ item.account }}" + when: ghost_deploy_site in item.key + +- name: "Delete content" + file: + path: "{{ item.home }}/www/content" + state: absent + loop: "{{ ghost }}" + when: ghost_deploy_site in item.key + +- name: "Symlink content" + file: + src: "{{ item.home }}/content" + dest: "{{ item.home }}/www/content" + state: link + owner: "{{ item.account }}" + group: "{{ item.account }}" + loop: "{{ ghost }}" + when: ghost_deploy_site in item.key + become: yes + become_user : "{{ item.account }}" + +- name: "Config ghost" + template: + src: "config.production.json.j2" + dest: "{{ item.home }}/www/config.production.json" + owner: "{{ item.account }}" + group: "{{ item.account }}" + loop: "{{ ghost }}" + when: ghost_deploy_site in item.key + +- name: "Config daemon" + template: + src: "systemd.service.j2" + dest: "/etc/systemd/system/{{ item.name }}.service" + loop: "{{ ghost }}" + when: ghost_deploy_site in item.key + +- name: "Install node modules" + shell: "NODE_ENV=production npm i" + args: + chdir: "{{ item.home }}/www" + loop: "{{ ghost }}" + become: yes + become_user : "{{ item.account }}" + when: ghost_deploy_site in item.key + +- name: "Install yarn module" + shell: "NODE_ENV=production yarn install" + args: + chdir: "{{ item.home }}/www" + loop: "{{ ghost }}" + become: yes + become_user : "{{ item.account }}" + when: ghost_deploy_site in item.key + +- name: "Knex init" + shell: "NODE_ENV=production node_modules/knex-migrator/bin/knex-migrator init" + args: + chdir: "{{ item.home }}/www" + loop: "{{ ghost }}" + become: yes + become_user : "{{ item.account }}" + when: ghost_deploy_site in item.key + +- name: "Knex migrate" + shell: "NODE_ENV=production node_modules/knex-migrator/bin/knex-migrator migrate" + args: + chdir: "{{ item.home }}/www" + loop: "{{ ghost }}" + become: yes + become_user : "{{ item.account }}" + when: ghost_deploy_site in item.key + +- name: "Reload systemctl" + systemd: + daemon_reload: yes + +- name: "Enable service" + systemd: + name: "{{ item.name }}.service" + enabled: yes + loop: "{{ ghost }}" + when: ghost_deploy_site in item.key + +- name: "Restart service" + systemd: + name: "{{ item.name }}.service" + state: restarted + loop: "{{ ghost }}" + when: ghost_deploy_site in item.key + +- name: "Delete archive" + file: + path: "{{ item.home }}/ghost-latest.zip" + state: absent + loop: "{{ ghost }}" + when: ghost_deploy_site in item.key + +- name: "Clean cache yarn" + shell: "yarn cache clean" + args: + chdir: "{{ item.home }}/" + loop: "{{ ghost }}" + become: yes + become_user : "{{ item.account }}" + when: ghost_deploy_site in item.key + +- name: "NPM Cache clean" + shell: "npm cache clean --force" + args: + chdir: "{{ item.home }}/" + loop: "{{ ghost }}" + become: yes + become_user : "{{ item.account }}" + when: ghost_deploy_site in item.key diff --git a/templates/.config.production.json.j2.swp b/templates/.config.production.json.j2.swp new file mode 100644 index 0000000..7bb94c2 Binary files /dev/null and b/templates/.config.production.json.j2.swp differ diff --git a/templates/config.production.json.j2 b/templates/config.production.json.j2 new file mode 100644 index 0000000..4f5f537 --- /dev/null +++ b/templates/config.production.json.j2 @@ -0,0 +1,57 @@ +{ + {% if item.url is defined %} + "url": "https://{{ item.url }}", + {% else %} + "url": "https://{{ item.name }}", + {% endif %} + "server": { + "port": {{ item.ghost_port }}, + "host": "{{ item.ghost_host }}" + }, + "database": { + "client": "mysql", + "connection": { + "host": "{{ item.db_host }}", + "user": "{{ item.db_user }}", + "password": "{{ item.db_password }}", + "database": "{{ item.db }}" + } + }, + "privacy": { + "useTinfoil": true + }, + "mail": { + {% if item.email_send == True %} + "transport": "SMTP", + "from": "{{ item.email_from }}", + "options": { + "host": "{{ item.email_host }}", + "port": {{ item.email_port }}, + "auth": { + "user": "{{ item.email_user }}", + "pass": "{{ item.email_pass }}" + } + } + {% else %} + "transport": "Direct" + {% endif %} + }, + "logging": { + "path": "/var/log/ghost/{{ item.name }}/", + "level": "error", + "rotation": { + "enabled": true, + "count": 15, + "period": "1d" + }, + "transports": [ + "file" + ] + }, + "compress": true, + "process": "systemd", + "paths": { + "contentPath": "{{ item.home }}/www/content" + } +} + diff --git a/templates/systemd.service.j2 b/templates/systemd.service.j2 new file mode 100644 index 0000000..02b4729 --- /dev/null +++ b/templates/systemd.service.j2 @@ -0,0 +1,16 @@ +[Unit] + Description=Ghost blog for {{ item.name }} + After=network.target + +[Service] + Type=simple + User={{ item.account }} + WorkingDirectory={{ item.home }}/www/ + Environment="NODE_ENV=production" + ExecStart=/usr/bin/node index.js + TimeoutSec=15 + Restart=always + +[Install] + WantedBy=multi-user.target +