Compare commits
1 Commits
fa8afa87e5
...
flip_dev
| Author | SHA1 | Date | |
|---|---|---|---|
| 4ec10f0f65 |
0
.ansible/.lock
Normal file
0
.ansible/.lock
Normal file
@@ -1,70 +0,0 @@
|
|||||||
---
|
|
||||||
name: CI/CD Pipeline
|
|
||||||
|
|
||||||
"on":
|
|
||||||
push:
|
|
||||||
branches: [main, flip_dev]
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
lint:
|
|
||||||
runs-on: docker
|
|
||||||
container:
|
|
||||||
image: node:20-bullseye
|
|
||||||
steps:
|
|
||||||
- name: Checkout code
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
|
|
||||||
- name: Install Python & linters
|
|
||||||
run: |
|
|
||||||
apt-get update && apt-get install -y python3 python3-pip bash git
|
|
||||||
pip3 install --upgrade pip
|
|
||||||
pip3 install yamllint ansible-lint
|
|
||||||
|
|
||||||
- name: Run linters
|
|
||||||
run: |
|
|
||||||
yamllint .
|
|
||||||
|
|
||||||
deploy:
|
|
||||||
runs-on: docker
|
|
||||||
container:
|
|
||||||
image: node:20-bullseye
|
|
||||||
needs: build
|
|
||||||
steps:
|
|
||||||
- name: Checkout code
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
|
|
||||||
- name: Install Ansible & dependencies
|
|
||||||
run: |
|
|
||||||
apt-get update && apt-get install -y python3 python3-pip openssh-client bash git
|
|
||||||
pip3 install --upgrade pip
|
|
||||||
pip3 install ansible
|
|
||||||
|
|
||||||
- name: Setup SSH
|
|
||||||
shell: bash
|
|
||||||
env:
|
|
||||||
SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }}
|
|
||||||
SSH_PASSPHRASE: ${{ secrets.SSH_PASSPHRASE }}
|
|
||||||
run: |
|
|
||||||
set -euo pipefail
|
|
||||||
|
|
||||||
mkdir -p ~/.ssh
|
|
||||||
chmod 700 ~/.ssh
|
|
||||||
|
|
||||||
echo "$SSH_PRIVATE_KEY" | tr -d '\r' > ~/.ssh/id_ed25519
|
|
||||||
chmod 600 ~/.ssh/id_ed25519
|
|
||||||
|
|
||||||
ssh-keyscan -H 213.95.90.157 >> ~/.ssh/known_hosts
|
|
||||||
|
|
||||||
eval "$(ssh-agent -s)"
|
|
||||||
if [ -n "${SSH_PASSPHRASE:-}" ]; then
|
|
||||||
echo "$SSH_PASSPHRASE" | ssh-add ~/.ssh/id_ed25519
|
|
||||||
else
|
|
||||||
ssh-add ~/.ssh/id_ed25519
|
|
||||||
fi
|
|
||||||
|
|
||||||
ssh -o BatchMode=yes root@213.95.90.157 true
|
|
||||||
|
|
||||||
- name: Run Ansible
|
|
||||||
run: |
|
|
||||||
ansible-playbook -i ansible/inventory.yaml site.yaml
|
|
||||||
|
|
||||||
11
.gitlab-ci.yml
Normal file
11
.gitlab-ci.yml
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
---
|
||||||
|
stages:
|
||||||
|
- lint
|
||||||
|
|
||||||
|
yamllint:
|
||||||
|
stage: lint
|
||||||
|
image: python:3.12-alpine
|
||||||
|
before_script:
|
||||||
|
- pip install --no-cache-dir yamllint
|
||||||
|
script:
|
||||||
|
- yamllint .
|
||||||
3
.vscode/settings.json
vendored
3
.vscode/settings.json
vendored
@@ -1,3 +0,0 @@
|
|||||||
{
|
|
||||||
"ansible.python.interpreterPath": "/opt/homebrew/bin/python3"
|
|
||||||
}
|
|
||||||
@@ -1,19 +0,0 @@
|
|||||||
---
|
|
||||||
extends: default
|
|
||||||
|
|
||||||
ignore: |
|
|
||||||
^venv/*
|
|
||||||
^\.venv/*
|
|
||||||
^\.gitea/*
|
|
||||||
^\.git/*
|
|
||||||
^\.ansible_test/*
|
|
||||||
^ansible_test/*
|
|
||||||
^\.ansiblelint/*
|
|
||||||
|
|
||||||
rules:
|
|
||||||
line-length:
|
|
||||||
max: 400
|
|
||||||
level: warning
|
|
||||||
trailing-spaces: disable
|
|
||||||
indentation:
|
|
||||||
spaces: 2
|
|
||||||
@@ -2,5 +2,3 @@
|
|||||||
[defaults]
|
[defaults]
|
||||||
inventory = ansible/inventory.yaml
|
inventory = ansible/inventory.yaml
|
||||||
roles_path = ./roles
|
roles_path = ./roles
|
||||||
[ssh_connection]
|
|
||||||
ssh_args = -o BatchMode=yes -o PreferredAuthentications=publickey
|
|
||||||
@@ -4,3 +4,4 @@ all:
|
|||||||
server1:
|
server1:
|
||||||
ansible_host: 213.95.90.157
|
ansible_host: 213.95.90.157
|
||||||
ansible_user: root
|
ansible_user: root
|
||||||
|
ansible_ssh_private_key_file: /Users/sotos/.ssh/id_rsa
|
||||||
|
|||||||
@@ -1,11 +1,24 @@
|
|||||||
|
---
|
||||||
- hosts: all
|
- hosts: all
|
||||||
become: true
|
become: true
|
||||||
|
roles:
|
||||||
|
- docker/snake
|
||||||
vars:
|
vars:
|
||||||
app_dir: /opt/docker/snake
|
app_dir: /opt/docker/snake
|
||||||
snake_image: dns.s-martika.com/smartika/snake-game:2.0
|
|
||||||
|
|
||||||
roles:
|
tasks:
|
||||||
- role: docker/snake
|
- name: Create app directory
|
||||||
vars:
|
file:
|
||||||
app_dir: "{{ app_dir }}"
|
path: "{{ app_dir }}"
|
||||||
snake_image: "{{ snake_image }}"
|
state: directory
|
||||||
|
|
||||||
|
- name: Copy compose file
|
||||||
|
copy:
|
||||||
|
src: "{{ playbook_dir }}/roles/docker/snake/files/docker-compose.yaml"
|
||||||
|
dest: "{{ app_dir }}/docker-compose.yaml"
|
||||||
|
|
||||||
|
|
||||||
|
- name: Start snake container
|
||||||
|
command: docker compose up -d
|
||||||
|
args:
|
||||||
|
chdir: "{{ app_dir }}"
|
||||||
|
|||||||
@@ -4,7 +4,6 @@ gitea_user: smartika
|
|||||||
gitea_token: "idNu783r4ub7ZXi"
|
gitea_token: "idNu783r4ub7ZXi"
|
||||||
|
|
||||||
snake_image: dns.s-martika.com/smartika/snake-game
|
snake_image: dns.s-martika.com/smartika/snake-game
|
||||||
app_dir: /opt/docker/snake
|
|
||||||
snake_tag: "1.0"
|
snake_tag: "1.0"
|
||||||
snake_container_name: snake-game
|
snake_container_name: snake-game
|
||||||
snake_port: 8080
|
snake_port: 8080
|
||||||
|
|||||||
@@ -1,30 +1,22 @@
|
|||||||
---
|
---
|
||||||
# Ensure app directory exists
|
|
||||||
- name: Create app directory
|
|
||||||
file:
|
|
||||||
path: "{{ app_dir }}"
|
|
||||||
state: directory
|
|
||||||
|
|
||||||
# Login to private registry
|
|
||||||
- name: Login to private registry
|
- name: Login to private registry
|
||||||
docker_login:
|
docker_login:
|
||||||
registry_url: dns.s-martika.com
|
registry_url: dns.s-martika.com
|
||||||
username: "{{ gitea_user }}"
|
username: "{{ gitea_user }}"
|
||||||
password: "{{ gitea_token }}"
|
password: "{{ gitea_token }}"
|
||||||
|
|
||||||
# Pull latest image
|
|
||||||
- name: Pull snake-game image
|
- name: Pull snake-game image
|
||||||
docker_image:
|
docker_image:
|
||||||
name: "{{ snake_image }}"
|
name: dns.s-martika.com/smartika/snake-game
|
||||||
|
tag: "1.0"
|
||||||
source: pull
|
source: pull
|
||||||
|
|
||||||
# Run container
|
|
||||||
- name: Run snake-game container
|
- name: Run snake-game container
|
||||||
docker_container:
|
docker_container:
|
||||||
name: snake-game
|
name: snake-game
|
||||||
image: "{{ snake_image }}"
|
image: dns.s-martika.com/smartika/snake-game:1.0
|
||||||
state: started
|
state: started
|
||||||
restart_policy: unless-stopped
|
restart_policy: always
|
||||||
ports:
|
ports:
|
||||||
- "8080:80" # host port → container port
|
- "8080:80"
|
||||||
pull: yes
|
|
||||||
|
|||||||
@@ -4,33 +4,21 @@ services:
|
|||||||
prometheus:
|
prometheus:
|
||||||
image: prom/prometheus:latest
|
image: prom/prometheus:latest
|
||||||
volumes:
|
volumes:
|
||||||
- ./prometheus.yaml:/etc/prometheus/prometheus.yml:ro
|
- ./prometheus.yml:/etc/prometheus/prometheus.yml:ro
|
||||||
ports:
|
ports:
|
||||||
- "9090:9090"
|
- "9090:9090"
|
||||||
networks:
|
networks:
|
||||||
- snake_net
|
- snake_net
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
|
|
||||||
nginx-prometheus-exporter:
|
|
||||||
image: nginx/nginx-prometheus-exporter:latest
|
|
||||||
container_name: nginx-prometheus-exporter
|
|
||||||
ports:
|
|
||||||
- "9113:9113"
|
|
||||||
environment:
|
|
||||||
- NGINX_STATUS_URL=http://nginx:8080/metrics
|
|
||||||
networks:
|
|
||||||
- snake_net
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
grafana:
|
grafana:
|
||||||
image: grafana/grafana:latest
|
image: grafana/grafana:latest
|
||||||
|
user: "472"
|
||||||
volumes:
|
volumes:
|
||||||
- ./grafana/provisioning:/etc/grafana/provisioning:ro
|
- ./grafana/provisioning:/etc/grafana/provisioning:ro
|
||||||
- grafana_data:/var/lib/grafana
|
- grafana_data:/var/lib/grafana
|
||||||
environment:
|
environment:
|
||||||
GF_SECURITY_ADMIN_PASSWORD: "admin"
|
GF_SECURITY_ADMIN_PASSWORD: "admin"
|
||||||
GF_DASHBOARDS_DEFAULT_HOME_DASHBOARD_PATH: /var/lib/grafana/dashboards/home.json
|
|
||||||
ports:
|
ports:
|
||||||
- "3000:3000"
|
- "3000:3000"
|
||||||
networks:
|
networks:
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -2,9 +2,9 @@
|
|||||||
apiVersion: 1
|
apiVersion: 1
|
||||||
|
|
||||||
providers:
|
providers:
|
||||||
- name: 'default'
|
- name: default
|
||||||
folder: 'Home'
|
orgId: 1
|
||||||
|
folder: ""
|
||||||
type: file
|
type: file
|
||||||
editable: true
|
|
||||||
options:
|
options:
|
||||||
path: /var/lib/grafana/dashboards
|
path: /etc/grafana/provisioning/dashboards
|
||||||
|
|||||||
@@ -6,7 +6,3 @@ scrape_configs:
|
|||||||
- job_name: "prometheus"
|
- job_name: "prometheus"
|
||||||
static_configs:
|
static_configs:
|
||||||
- targets: ["localhost:9090"]
|
- targets: ["localhost:9090"]
|
||||||
|
|
||||||
- job_name: 'nginx'
|
|
||||||
static_configs:
|
|
||||||
- targets: ['nginx-prometheus-exporter:9113']
|
|
||||||
|
|||||||
Reference in New Issue
Block a user