Первая версия
This commit is contained in:
commit
0da0cfd3f9
9 changed files with 164 additions and 0 deletions
25
README.md
Normal file
25
README.md
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
# Factorio Terraform Beget
|
||||
|
||||
Terraform-сценарий, создающий VPS-сервер в инфраструктуре Beget. Для запуска необходимо для начала создать файл `.auto.tfvars` с переменной `beget_token`,
|
||||
в которой указан JWT-токен:
|
||||
```
|
||||
beget_token = "eyJhbG...gQg"
|
||||
```
|
||||
Создать его можно на странице https://developer.beget.com/#post-/v1/auth
|
||||
|
||||
После этого запустить создание VPS-сервера с помощью команды:
|
||||
```
|
||||
terraform apply
|
||||
```
|
||||
Если используется [OpenTofu](https://opentofu.org/docs/intro/install/) (HashiCorp блокирует российские IP-адреса), то для запуска используется следующая команда:
|
||||
```
|
||||
tofu apply
|
||||
```
|
||||
Для удаления сервера используется команда `terraform destroy` или `tofu destroy`
|
||||
|
||||
---
|
||||
|
||||
## Зависимости
|
||||
|
||||
- [Terraform](https://developer.hashicorp.com/terraform/install) или [OpenTofu](https://opentofu.org/docs/intro/install/)
|
||||
- [Ansible](https://docs.ansible.com/projects/ansible/latest/installation_guide/intro_installation.html#pipx-install)
|
||||
7
ansible.cfg
Executable file
7
ansible.cfg
Executable file
|
|
@ -0,0 +1,7 @@
|
|||
[defaults]
|
||||
remote_user=root
|
||||
roles_path=./roles
|
||||
host_key_checking = False
|
||||
|
||||
[privilege_escalation]
|
||||
become=True
|
||||
2
inventory/factorio.ini
Executable file
2
inventory/factorio.ini
Executable file
|
|
@ -0,0 +1,2 @@
|
|||
[factorio]
|
||||
your.server
|
||||
52
main.tf
Executable file
52
main.tf
Executable file
|
|
@ -0,0 +1,52 @@
|
|||
terraform {
|
||||
required_providers {
|
||||
beget = {
|
||||
source = "tf.beget.com/beget/beget"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
variable "beget_token" {
|
||||
sensitive = true
|
||||
type = string
|
||||
description = "JWT токен для облачной инфраструктуры Beget"
|
||||
}
|
||||
|
||||
provider "beget" {
|
||||
token = var.beget_token
|
||||
}
|
||||
|
||||
resource "beget_ssh_key" "devops" {
|
||||
name = "Terraform key"
|
||||
public_key = file("~/.ssh/id_rsa.pub")
|
||||
}
|
||||
|
||||
data "beget_software" "ubuntu" {
|
||||
slug = "ubuntu-24-04"
|
||||
}
|
||||
|
||||
resource "beget_compute_instance" "test-server" {
|
||||
name = "Test Server"
|
||||
description = "Тестовый TF сервер"
|
||||
hostname = "debian-test"
|
||||
region = "ru1"
|
||||
configuration = {
|
||||
cpu = 1
|
||||
ram_mb = 1*1024
|
||||
disk_mb = 10 * 1024
|
||||
cpu_class = "normal_cpu"
|
||||
}
|
||||
image = {
|
||||
software = {
|
||||
id = data.beget_software.ubuntu.id
|
||||
}
|
||||
}
|
||||
access = {
|
||||
ssh_keys = [beget_ssh_key.devops.id]
|
||||
}
|
||||
|
||||
|
||||
provisioner "local-exec" {
|
||||
command = "sleep 15; ansible-playbook -i '${self.ip_address},' --private-key ~/.ssh/id_rsa playbook.yml"
|
||||
}
|
||||
}
|
||||
8
playbook.yml
Executable file
8
playbook.yml
Executable file
|
|
@ -0,0 +1,8 @@
|
|||
---
|
||||
- name: Install Factorio
|
||||
hosts: all
|
||||
|
||||
roles:
|
||||
- base
|
||||
- docker
|
||||
- factorio
|
||||
7
roles/base/tasks/main.yml
Executable file
7
roles/base/tasks/main.yml
Executable file
|
|
@ -0,0 +1,7 @@
|
|||
- name: Update cache
|
||||
ansible.builtin.apt:
|
||||
update_cache: true
|
||||
|
||||
- name: Upgrade ubuntu
|
||||
ansible.builtin.apt:
|
||||
upgrade: "full"
|
||||
33
roles/docker/tasks/main.yml
Executable file
33
roles/docker/tasks/main.yml
Executable file
|
|
@ -0,0 +1,33 @@
|
|||
- name: Install ca-certificates and curl
|
||||
ansible.builtin.apt:
|
||||
package:
|
||||
- ca-certificates
|
||||
- curl
|
||||
- python3-requests
|
||||
|
||||
- name: Get keys
|
||||
ansible.builtin.get_url:
|
||||
dest: /etc/apt/keyrings/docker.asc
|
||||
url: https://download.docker.com/linux/ubuntu/gpg
|
||||
mode: 644
|
||||
|
||||
- name: Add docker repository
|
||||
ansible.builtin.apt_repository:
|
||||
repo: "deb [arch=amd64 signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu {{ ansible_distribution_release }} stable"
|
||||
|
||||
- name: Install docker
|
||||
ansible.builtin.apt:
|
||||
package:
|
||||
- docker-ce
|
||||
- docker-ce-cli
|
||||
- containerd.io
|
||||
- docker-buildx-plugin
|
||||
- docker-compose-plugin
|
||||
|
||||
- name: SystemD enable docker
|
||||
ansible.builtin.systemd_service:
|
||||
name: docker
|
||||
enabled: true
|
||||
state: "started"
|
||||
|
||||
|
||||
17
roles/factorio/tasks/main.yml
Executable file
17
roles/factorio/tasks/main.yml
Executable file
|
|
@ -0,0 +1,17 @@
|
|||
- name: Create /opt/beget/factorio
|
||||
ansible.builtin.file:
|
||||
path: /opt/beget/factorio/factorio_data
|
||||
state: directory
|
||||
mode: "700"
|
||||
recurse: true
|
||||
|
||||
- name: Copy template to server
|
||||
ansible.builtin.template:
|
||||
src: docker-compose.yml.j2
|
||||
dest: /opt/beget/factorio/docker-compose.yml
|
||||
mode: "600"
|
||||
|
||||
- name: Start factorio server
|
||||
community.docker.docker_compose_v2:
|
||||
project_src: /opt/beget/factorio
|
||||
state: present
|
||||
13
roles/factorio/templates/docker-compose.yml.j2
Executable file
13
roles/factorio/templates/docker-compose.yml.j2
Executable file
|
|
@ -0,0 +1,13 @@
|
|||
version: "3.8"
|
||||
|
||||
services:
|
||||
factorio:
|
||||
image: factoriotools/factorio:latest
|
||||
restart: always
|
||||
environment:
|
||||
DLC_SPACE_AGE: "false"
|
||||
ports:
|
||||
- "34197:34197/udp"
|
||||
- "27015:27015/tcp"
|
||||
volumes:
|
||||
- ./factorio_data:/factorio
|
||||
Loading…
Add table
Add a link
Reference in a new issue