fujin-cli 0.5.0__tar.gz → 0.6.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of fujin-cli might be problematic. Click here for more details.
- fujin_cli-0.6.0/.github/workflows/publish.yml +169 -0
- {fujin_cli-0.5.0 → fujin_cli-0.6.0}/.pre-commit-config.yaml +6 -0
- fujin_cli-0.6.0/CHANGELOG.md +7 -0
- {fujin_cli-0.5.0 → fujin_cli-0.6.0}/PKG-INFO +8 -5
- {fujin_cli-0.5.0 → fujin_cli-0.6.0}/README.md +6 -2
- {fujin_cli-0.5.0 → fujin_cli-0.6.0}/docs/commands/app.rst +1 -1
- {fujin_cli-0.5.0 → fujin_cli-0.6.0}/docs/commands/config.rst +1 -1
- fujin_cli-0.6.0/docs/commands/deploy.rst +67 -0
- {fujin_cli-0.5.0 → fujin_cli-0.6.0}/docs/commands/docs.rst +1 -1
- {fujin_cli-0.5.0 → fujin_cli-0.6.0}/docs/commands/down.rst +1 -1
- {fujin_cli-0.5.0 → fujin_cli-0.6.0}/docs/commands/init.rst +1 -1
- {fujin_cli-0.5.0 → fujin_cli-0.6.0}/docs/commands/proxy.rst +1 -1
- {fujin_cli-0.5.0 → fujin_cli-0.6.0}/docs/commands/prune.rst +1 -1
- {fujin_cli-0.5.0 → fujin_cli-0.6.0}/docs/commands/redeploy.rst +1 -1
- {fujin_cli-0.5.0 → fujin_cli-0.6.0}/docs/commands/rollback.rst +1 -1
- {fujin_cli-0.5.0 → fujin_cli-0.6.0}/docs/commands/secrets.rst +2 -2
- {fujin_cli-0.5.0 → fujin_cli-0.6.0}/docs/commands/server.rst +1 -1
- {fujin_cli-0.5.0 → fujin_cli-0.6.0}/docs/commands/up.rst +1 -1
- {fujin_cli-0.5.0 → fujin_cli-0.6.0}/docs/conf.py +1 -0
- {fujin_cli-0.5.0 → fujin_cli-0.6.0}/docs/configuration.rst +1 -1
- fujin_cli-0.6.0/docs/index.rst +52 -0
- {fujin_cli-0.5.0 → fujin_cli-0.6.0}/docs/installation.rst +1 -1
- fujin_cli-0.6.0/docs/requirements.txt +1090 -0
- fujin_cli-0.6.0/docs/tutorial.rst +337 -0
- {fujin_cli-0.5.0 → fujin_cli-0.6.0}/examples/django/bookstore/fujin.toml +3 -6
- fujin_cli-0.6.0/examples/golang/pocketbase/fujin.toml +23 -0
- {fujin_cli-0.5.0 → fujin_cli-0.6.0}/justfile +26 -15
- {fujin_cli-0.5.0 → fujin_cli-0.6.0}/pyproject.toml +4 -4
- fujin_cli-0.6.0/src/fujin/__init__.py +0 -0
- {fujin_cli-0.5.0 → fujin_cli-0.6.0}/src/fujin/commands/init.py +0 -2
- {fujin_cli-0.5.0 → fujin_cli-0.6.0}/src/fujin/config.py +7 -6
- {fujin_cli-0.5.0 → fujin_cli-0.6.0}/src/fujin/proxies/nginx.py +14 -16
- {fujin_cli-0.5.0 → fujin_cli-0.6.0}/uv.lock +36 -1
- fujin_cli-0.5.0/.github/workflows/publish.yml +0 -36
- fujin_cli-0.5.0/docs/commands/deploy.rst +0 -7
- fujin_cli-0.5.0/docs/index.rst +0 -32
- fujin_cli-0.5.0/docs/requirements.txt +0 -6
- fujin_cli-0.5.0/docs/tutorial.rst +0 -2
- {fujin_cli-0.5.0 → fujin_cli-0.6.0}/.gitignore +0 -0
- {fujin_cli-0.5.0 → fujin_cli-0.6.0}/.readthedocs.yaml +0 -0
- {fujin_cli-0.5.0 → fujin_cli-0.6.0}/LICENSE.txt +0 -0
- {fujin_cli-0.5.0 → fujin_cli-0.6.0}/Vagrantfile +0 -0
- {fujin_cli-0.5.0 → fujin_cli-0.6.0}/docs/changelog.rst +0 -0
- {fujin_cli-0.5.0 → fujin_cli-0.6.0}/docs/commands/index.rst +0 -0
- {fujin_cli-0.5.0 → fujin_cli-0.6.0}/docs/hooks.rst +0 -0
- {fujin_cli-0.5.0 → fujin_cli-0.6.0}/examples/django/bookstore/README.md +0 -0
- {fujin_cli-0.5.0 → fujin_cli-0.6.0}/examples/django/bookstore/bookstore/__init__.py +0 -0
- {fujin_cli-0.5.0 → fujin_cli-0.6.0}/examples/django/bookstore/bookstore/__main__.py +0 -0
- {fujin_cli-0.5.0 → fujin_cli-0.6.0}/examples/django/bookstore/bookstore/asgi.py +0 -0
- {fujin_cli-0.5.0 → fujin_cli-0.6.0}/examples/django/bookstore/bookstore/settings.py +0 -0
- {fujin_cli-0.5.0 → fujin_cli-0.6.0}/examples/django/bookstore/bookstore/urls.py +0 -0
- {fujin_cli-0.5.0 → fujin_cli-0.6.0}/examples/django/bookstore/bookstore/wsgi.py +0 -0
- {fujin_cli-0.5.0 → fujin_cli-0.6.0}/examples/django/bookstore/manage.py +0 -0
- {fujin_cli-0.5.0 → fujin_cli-0.6.0}/examples/django/bookstore/pyproject.toml +0 -0
- {fujin_cli-0.5.0 → fujin_cli-0.6.0}/examples/django/bookstore/requirements.txt +0 -0
- /fujin_cli-0.5.0/src/fujin/__init__.py → /fujin_cli-0.6.0/examples/golang/pocketbase/.env.prod +0 -0
- {fujin_cli-0.5.0 → fujin_cli-0.6.0}/src/fujin/__main__.py +0 -0
- {fujin_cli-0.5.0 → fujin_cli-0.6.0}/src/fujin/commands/__init__.py +0 -0
- {fujin_cli-0.5.0 → fujin_cli-0.6.0}/src/fujin/commands/_base.py +0 -0
- {fujin_cli-0.5.0 → fujin_cli-0.6.0}/src/fujin/commands/app.py +0 -0
- {fujin_cli-0.5.0 → fujin_cli-0.6.0}/src/fujin/commands/config.py +0 -0
- {fujin_cli-0.5.0 → fujin_cli-0.6.0}/src/fujin/commands/deploy.py +0 -0
- {fujin_cli-0.5.0 → fujin_cli-0.6.0}/src/fujin/commands/docs.py +0 -0
- {fujin_cli-0.5.0 → fujin_cli-0.6.0}/src/fujin/commands/down.py +0 -0
- {fujin_cli-0.5.0 → fujin_cli-0.6.0}/src/fujin/commands/proxy.py +0 -0
- {fujin_cli-0.5.0 → fujin_cli-0.6.0}/src/fujin/commands/prune.py +0 -0
- {fujin_cli-0.5.0 → fujin_cli-0.6.0}/src/fujin/commands/redeploy.py +0 -0
- {fujin_cli-0.5.0 → fujin_cli-0.6.0}/src/fujin/commands/rollback.py +0 -0
- {fujin_cli-0.5.0 → fujin_cli-0.6.0}/src/fujin/commands/secrets.py +0 -0
- {fujin_cli-0.5.0 → fujin_cli-0.6.0}/src/fujin/commands/server.py +0 -0
- {fujin_cli-0.5.0 → fujin_cli-0.6.0}/src/fujin/commands/up.py +0 -0
- {fujin_cli-0.5.0 → fujin_cli-0.6.0}/src/fujin/connection.py +0 -0
- {fujin_cli-0.5.0 → fujin_cli-0.6.0}/src/fujin/errors.py +0 -0
- {fujin_cli-0.5.0 → fujin_cli-0.6.0}/src/fujin/hooks.py +0 -0
- {fujin_cli-0.5.0 → fujin_cli-0.6.0}/src/fujin/process_managers/__init__.py +0 -0
- {fujin_cli-0.5.0 → fujin_cli-0.6.0}/src/fujin/process_managers/systemd.py +0 -0
- {fujin_cli-0.5.0 → fujin_cli-0.6.0}/src/fujin/proxies/__init__.py +0 -0
- {fujin_cli-0.5.0 → fujin_cli-0.6.0}/src/fujin/proxies/caddy.py +0 -0
- {fujin_cli-0.5.0 → fujin_cli-0.6.0}/src/fujin/proxies/dummy.py +0 -0
- {fujin_cli-0.5.0 → fujin_cli-0.6.0}/src/fujin/templates/simple.service +0 -0
- {fujin_cli-0.5.0 → fujin_cli-0.6.0}/src/fujin/templates/web.service +0 -0
- {fujin_cli-0.5.0 → fujin_cli-0.6.0}/src/fujin/templates/web.socket +0 -0
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
name: Publish package
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
tags:
|
|
6
|
+
- "v*.*.*"
|
|
7
|
+
|
|
8
|
+
jobs:
|
|
9
|
+
build-python-wheel-and-sdist:
|
|
10
|
+
name: Build a pure Python wheel and source distribution
|
|
11
|
+
runs-on: ubuntu-latest
|
|
12
|
+
steps:
|
|
13
|
+
- name: Checkout code
|
|
14
|
+
uses: actions/checkout@v4
|
|
15
|
+
|
|
16
|
+
- name: Install uv
|
|
17
|
+
uses: astral-sh/setup-uv@v3
|
|
18
|
+
|
|
19
|
+
- name: Build
|
|
20
|
+
run: uv build
|
|
21
|
+
|
|
22
|
+
- uses: actions/upload-artifact@v4
|
|
23
|
+
with:
|
|
24
|
+
name: wheels
|
|
25
|
+
path: dist/*
|
|
26
|
+
if-no-files-found: error
|
|
27
|
+
overwrite: true
|
|
28
|
+
|
|
29
|
+
build-binaries:
|
|
30
|
+
name: Build binary application for ${{ matrix.job.target }} (${{ matrix.job.os }})
|
|
31
|
+
runs-on: ${{ matrix.job.os }}
|
|
32
|
+
needs: build-python-wheel-and-sdist
|
|
33
|
+
strategy:
|
|
34
|
+
fail-fast: false
|
|
35
|
+
matrix:
|
|
36
|
+
job:
|
|
37
|
+
# Linux
|
|
38
|
+
- target: x86_64-unknown-linux-gnu
|
|
39
|
+
os: ubuntu-latest
|
|
40
|
+
cross: true
|
|
41
|
+
release_suffix: x86_64-linux
|
|
42
|
+
- target: x86_64-unknown-linux-musl
|
|
43
|
+
os: ubuntu-latest
|
|
44
|
+
cross: true
|
|
45
|
+
release_suffix: x86_64-linux-musl
|
|
46
|
+
- target: aarch64-unknown-linux-gnu
|
|
47
|
+
os: ubuntu-latest
|
|
48
|
+
cross: true
|
|
49
|
+
release_suffix: aarch64-linux
|
|
50
|
+
# - target: i686-unknown-linux-gnu
|
|
51
|
+
# os: ubuntu-latest
|
|
52
|
+
# cross: true
|
|
53
|
+
# release_suffix: i686-linux
|
|
54
|
+
# Windows
|
|
55
|
+
- target: x86_64-pc-windows-msvc
|
|
56
|
+
os: windows-2022
|
|
57
|
+
release_suffix: x86_64-windows
|
|
58
|
+
- target: i686-pc-windows-msvc
|
|
59
|
+
os: windows-2022
|
|
60
|
+
release_suffix: i686-windows
|
|
61
|
+
# macOS
|
|
62
|
+
- target: aarch64-apple-darwin
|
|
63
|
+
os: macos-12
|
|
64
|
+
release_suffix: aarch64-osx
|
|
65
|
+
- target: x86_64-apple-darwin
|
|
66
|
+
os: macos-12
|
|
67
|
+
release_suffix: x86_64-osx
|
|
68
|
+
|
|
69
|
+
env:
|
|
70
|
+
CARGO_BUILD_TARGET: ${{ matrix.job.target }}
|
|
71
|
+
|
|
72
|
+
steps:
|
|
73
|
+
- name: Install uv
|
|
74
|
+
uses: astral-sh/setup-uv@v3
|
|
75
|
+
|
|
76
|
+
- name: Install just
|
|
77
|
+
uses: extractions/setup-just@v2
|
|
78
|
+
|
|
79
|
+
- name: Code Checkout
|
|
80
|
+
uses: actions/checkout@v4
|
|
81
|
+
|
|
82
|
+
- name: Install musl-tools on Linux
|
|
83
|
+
run: sudo apt-get install --yes musl musl-dev musl-tools
|
|
84
|
+
if: ${{ matrix.job.os == 'ubuntu-latest' }}
|
|
85
|
+
|
|
86
|
+
- name: Install Rust toolchain
|
|
87
|
+
if: ${{ !matrix.job.cross }}
|
|
88
|
+
uses: dtolnay/rust-toolchain@stable
|
|
89
|
+
with:
|
|
90
|
+
targets: ${{ matrix.job.target }}
|
|
91
|
+
|
|
92
|
+
- name: Set up cross compiling tools
|
|
93
|
+
if: matrix.job.cross
|
|
94
|
+
uses: taiki-e/setup-cross-toolchain-action@v1
|
|
95
|
+
with:
|
|
96
|
+
target: ${{ matrix.job.target}}
|
|
97
|
+
|
|
98
|
+
- name: Show toolchain information
|
|
99
|
+
run: |-
|
|
100
|
+
rustup toolchain list
|
|
101
|
+
rustup default
|
|
102
|
+
rustup -V
|
|
103
|
+
rustc -V
|
|
104
|
+
cargo -V
|
|
105
|
+
uv --version
|
|
106
|
+
|
|
107
|
+
- uses: actions/download-artifact@v4
|
|
108
|
+
with:
|
|
109
|
+
name: wheels
|
|
110
|
+
path: ${{ github.workspace }}/dist
|
|
111
|
+
merge-multiple: true
|
|
112
|
+
|
|
113
|
+
- name: Build binary
|
|
114
|
+
run: just build-bin
|
|
115
|
+
|
|
116
|
+
- name: Rename
|
|
117
|
+
working-directory: ${{ github.workspace }}
|
|
118
|
+
run: |-
|
|
119
|
+
mv dist/bin/fujin_cli* dist/bin/fujin_cli-${{ matrix.job.release_suffix }}
|
|
120
|
+
|
|
121
|
+
- name: Upload built binary package
|
|
122
|
+
uses: actions/upload-artifact@v4
|
|
123
|
+
with:
|
|
124
|
+
name: binaries-${{ matrix.job.release_suffix }}
|
|
125
|
+
path: dist/bin/*
|
|
126
|
+
if-no-files-found: error
|
|
127
|
+
|
|
128
|
+
publish-to-pypi:
|
|
129
|
+
name: Publish to PyPI
|
|
130
|
+
runs-on: ubuntu-latest
|
|
131
|
+
permissions:
|
|
132
|
+
id-token: write
|
|
133
|
+
needs: [build-python-wheel-and-sdist, build-binaries]
|
|
134
|
+
steps:
|
|
135
|
+
- name: Checkout code
|
|
136
|
+
uses: actions/checkout@v4
|
|
137
|
+
|
|
138
|
+
- uses: actions/download-artifact@v4
|
|
139
|
+
with:
|
|
140
|
+
name: wheels
|
|
141
|
+
path: dist
|
|
142
|
+
|
|
143
|
+
- uses: pypa/gh-action-pypi-publish@release/v1
|
|
144
|
+
|
|
145
|
+
release:
|
|
146
|
+
name: Create a GitHub release
|
|
147
|
+
runs-on: ubuntu-latest
|
|
148
|
+
permissions:
|
|
149
|
+
contents: write
|
|
150
|
+
needs: [build-python-wheel-and-sdist, build-binaries]
|
|
151
|
+
steps:
|
|
152
|
+
- name: Checkout code
|
|
153
|
+
uses: actions/checkout@v4
|
|
154
|
+
|
|
155
|
+
- uses: actions/download-artifact@v4
|
|
156
|
+
with:
|
|
157
|
+
path: dist
|
|
158
|
+
merge-multiple: true
|
|
159
|
+
|
|
160
|
+
- name: Generate Changelog
|
|
161
|
+
run: |
|
|
162
|
+
awk '/^## /{if (p) exit; p=1; next} p' ${{ github.workspace }}/CHANGELOG.md | tee ${{ github.workspace }}-CHANGELOG.txt
|
|
163
|
+
|
|
164
|
+
- name: Release
|
|
165
|
+
uses: softprops/action-gh-release@v2
|
|
166
|
+
with:
|
|
167
|
+
body_path: ${{ github.workspace }}-CHANGELOG.txt
|
|
168
|
+
files: dist/*
|
|
169
|
+
fail_on_unmatched_files: true
|
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: fujin-cli
|
|
3
|
-
Version: 0.
|
|
4
|
-
Summary:
|
|
3
|
+
Version: 0.6.0
|
|
4
|
+
Summary: Get your project up and running in a few minutes on your own vps.
|
|
5
5
|
Project-URL: Documentation, https://github.com/falcopackages/fujin#readme
|
|
6
6
|
Project-URL: Issues, https://github.com/falcopackages/fujin/issues
|
|
7
7
|
Project-URL: Source, https://github.com/falcopackages/fujin
|
|
8
8
|
Author-email: Tobi DEGNON <tobidegnon@proton.me>
|
|
9
|
-
License-File: LICENSE.txt
|
|
10
9
|
Keywords: caddy,deployment,django,fastapi,litestar,python,systemd
|
|
11
10
|
Classifier: Development Status :: 3 - Alpha
|
|
12
11
|
Classifier: Intended Audience :: Developers
|
|
@@ -37,16 +36,18 @@ Description-Content-Type: text/markdown
|
|
|
37
36
|
> [!IMPORTANT]
|
|
38
37
|
> This package currently contains minimal features and is a work-in-progress
|
|
39
38
|
|
|
39
|
+
<!-- content:start -->
|
|
40
|
+
|
|
40
41
|
`fujin` is a simple deployment tool that helps you get your project up and running on a VPS in a few minutes. It manages your app processes using `systemd` and runs your apps behind [caddy](https://caddyserver.com/). For Python projects,
|
|
41
42
|
it expects your app to be a packaged Python application ideally with a CLI entry point defined. For other languages, you need to provide a self-contained single executable file with all necessary dependencies.
|
|
42
43
|
The main job of `fujin` is to bootstrap your server (installing caddy, etc.), copy the files onto the server with a structure that supports rollback, and automatically generate configs for systemd and caddy that you can manually edit if needed.
|
|
43
44
|
|
|
44
|
-
Check out the [documentation📚](https://fujin.
|
|
45
|
+
Check out the [documentation📚](https://fujin.oluwatobi.dev/en/latest/) for installation, features, and usage guides.
|
|
45
46
|
|
|
46
47
|
## Why?
|
|
47
48
|
|
|
48
49
|
I wanted [kamal](https://kamal-deploy.org/) but without Docker, and I thought the idea was fun. At its core, this project automates versions of this [tutorial](https://www.digitalocean.com/community/tutorials/how-to-set-up-django-with-postgres-nginx-and-gunicorn-on-ubuntu). If you've been a Django beginner
|
|
49
|
-
trying to get your app in production, you probably went through this. I'm using caddy instead of nginx because
|
|
50
|
+
trying to get your app in production, you probably went through this. I'm using caddy instead of nginx because it's configurable via an API and it's is a no-brainer for SSL certificates. Systemd is the default on most Linux distributions and does a good enough job.
|
|
50
51
|
|
|
51
52
|
Fujin was initially planned to be a Python-only project, but the core concepts can be applied to any language that can produce a single distributable file (e.g., Go, Rust). I wanted to recreate kamal's nice local-to-remote app management API, but I'm skipping Docker to keep things simple.
|
|
52
53
|
I'm currently rocking SQLite in production for my side projects and ths setup is enough for my use case.
|
|
@@ -64,3 +65,5 @@ Fujin draws inspiration from the following tools for their developer experience.
|
|
|
64
65
|
## License
|
|
65
66
|
|
|
66
67
|
`fujin` is distributed under the terms of the [MIT](https://spdx.org/licenses/MIT.html) license.
|
|
68
|
+
|
|
69
|
+
<!-- content:end -->
|
|
@@ -9,16 +9,18 @@
|
|
|
9
9
|
> [!IMPORTANT]
|
|
10
10
|
> This package currently contains minimal features and is a work-in-progress
|
|
11
11
|
|
|
12
|
+
<!-- content:start -->
|
|
13
|
+
|
|
12
14
|
`fujin` is a simple deployment tool that helps you get your project up and running on a VPS in a few minutes. It manages your app processes using `systemd` and runs your apps behind [caddy](https://caddyserver.com/). For Python projects,
|
|
13
15
|
it expects your app to be a packaged Python application ideally with a CLI entry point defined. For other languages, you need to provide a self-contained single executable file with all necessary dependencies.
|
|
14
16
|
The main job of `fujin` is to bootstrap your server (installing caddy, etc.), copy the files onto the server with a structure that supports rollback, and automatically generate configs for systemd and caddy that you can manually edit if needed.
|
|
15
17
|
|
|
16
|
-
Check out the [documentation📚](https://fujin.
|
|
18
|
+
Check out the [documentation📚](https://fujin.oluwatobi.dev/en/latest/) for installation, features, and usage guides.
|
|
17
19
|
|
|
18
20
|
## Why?
|
|
19
21
|
|
|
20
22
|
I wanted [kamal](https://kamal-deploy.org/) but without Docker, and I thought the idea was fun. At its core, this project automates versions of this [tutorial](https://www.digitalocean.com/community/tutorials/how-to-set-up-django-with-postgres-nginx-and-gunicorn-on-ubuntu). If you've been a Django beginner
|
|
21
|
-
trying to get your app in production, you probably went through this. I'm using caddy instead of nginx because
|
|
23
|
+
trying to get your app in production, you probably went through this. I'm using caddy instead of nginx because it's configurable via an API and it's is a no-brainer for SSL certificates. Systemd is the default on most Linux distributions and does a good enough job.
|
|
22
24
|
|
|
23
25
|
Fujin was initially planned to be a Python-only project, but the core concepts can be applied to any language that can produce a single distributable file (e.g., Go, Rust). I wanted to recreate kamal's nice local-to-remote app management API, but I'm skipping Docker to keep things simple.
|
|
24
26
|
I'm currently rocking SQLite in production for my side projects and ths setup is enough for my use case.
|
|
@@ -36,3 +38,5 @@ Fujin draws inspiration from the following tools for their developer experience.
|
|
|
36
38
|
## License
|
|
37
39
|
|
|
38
40
|
`fujin` is distributed under the terms of the [MIT](https://spdx.org/licenses/MIT.html) license.
|
|
41
|
+
|
|
42
|
+
<!-- content:end -->
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
deploy
|
|
2
|
+
======
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
.. cappa:: fujin.commands.deploy.Deploy
|
|
6
|
+
:style: terminal
|
|
7
|
+
:terminal-width: 0
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
How it works
|
|
11
|
+
------------
|
|
12
|
+
|
|
13
|
+
Here's a high-level overview of what happens when you run the ``deploy`` command:
|
|
14
|
+
|
|
15
|
+
1. **Build the Application**: Your application is built using the ``build_command`` specified in your configuration.
|
|
16
|
+
|
|
17
|
+
2. **Transfer Files**: The environment variables file (``.env``) and the distribution file are transferred to the remote server. Optionally transfers ``requirements`` file (if specified).
|
|
18
|
+
|
|
19
|
+
3. **Install the Project**: Depending on the installation mode (Python package or binary), the project is installed on the remote server. For a Python package, a virtual environment is set up, dependencies are installed, and the distribution file (the wheel file) is then installed. For a binary, the binary file for the latest version is linked to the root of the application directory.
|
|
20
|
+
|
|
21
|
+
4. **Application Release**: If a ``release_command`` is specified in the configuration, it is executed at this stage.
|
|
22
|
+
|
|
23
|
+
5. **Configure and Start Services**: Configuration files for both ``systemd`` and the ``proxy`` (e.g., Caddy, by default) are generated or copied if previously exported. These configuration files are moved to their appropriate directories. A configuration reload is performed, and all relevant services are restarted.
|
|
24
|
+
|
|
25
|
+
6. **Update Version History**: The deployed version is recorded in the ``.versions`` file on the remote server.
|
|
26
|
+
|
|
27
|
+
7. **Prune Old Assets**: Old versions of the application are removed based on the ``versions_to_keep`` configuration.
|
|
28
|
+
|
|
29
|
+
8. **Completion**: A success message is displayed, and the URL to access the deployed project is provided.
|
|
30
|
+
|
|
31
|
+
Below is an example file layout and structure of the deployed application:
|
|
32
|
+
|
|
33
|
+
.. tab-set::
|
|
34
|
+
|
|
35
|
+
.. tab-item:: python package
|
|
36
|
+
|
|
37
|
+
.. code-block:: shell
|
|
38
|
+
|
|
39
|
+
app_directory/
|
|
40
|
+
├── .env # Environment variables file
|
|
41
|
+
├── .appenv # Application-specific environment setup
|
|
42
|
+
├── .versions # Version tracking file
|
|
43
|
+
├── .venv/ # Virtual environment
|
|
44
|
+
├── v1.2.3/ # Versioned asset directory
|
|
45
|
+
│ ├── app-1.2.3-py3-none-any.whl # Distribution file
|
|
46
|
+
│ └── requirements.txt # Optional requirements file
|
|
47
|
+
├── v1.2.2/
|
|
48
|
+
│ └── ...
|
|
49
|
+
└── v1.2.1/
|
|
50
|
+
└── ...
|
|
51
|
+
|
|
52
|
+
.. tab-item:: binary
|
|
53
|
+
|
|
54
|
+
.. code-block:: shell
|
|
55
|
+
|
|
56
|
+
app_directory/
|
|
57
|
+
├── .env # Environment variables file
|
|
58
|
+
├── .appenv # Application-specific environment setup
|
|
59
|
+
├── .versions # Version tracking file
|
|
60
|
+
├── app_binary -> v1.2.3/app_binary # Symbolic link to current version
|
|
61
|
+
├── v1.2.3/ # Versioned asset directory
|
|
62
|
+
│ └── app_binary # Distribution file
|
|
63
|
+
├── v1.2.2/
|
|
64
|
+
│ └── ...
|
|
65
|
+
└── v1.2.1/
|
|
66
|
+
└── ...
|
|
67
|
+
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
.. fujin documentation master file, created by
|
|
2
|
+
sphinx-quickstart on Tue Oct 29 14:01:13 2024.
|
|
3
|
+
You can adapt this file completely to your liking, but it should at least
|
|
4
|
+
contain the root `toctree` directive.
|
|
5
|
+
|
|
6
|
+
fujin documentation
|
|
7
|
+
===================
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
.. important::
|
|
11
|
+
|
|
12
|
+
This a work in progress, not ready for production use yet.
|
|
13
|
+
|
|
14
|
+
.. container:: badges
|
|
15
|
+
:name: badges
|
|
16
|
+
|
|
17
|
+
.. image:: https://img.shields.io/pypi/pyversions/fujin-cli.svg
|
|
18
|
+
:alt: Python versions
|
|
19
|
+
|
|
20
|
+
.. image:: https://github.com/falcopackages/fujin/actions/workflows/publish.yml/badge.svg
|
|
21
|
+
:alt: Github Actions Publish Status
|
|
22
|
+
|
|
23
|
+
.. image:: https://img.shields.io/badge/license-MIT-blue.svg
|
|
24
|
+
:alt: License
|
|
25
|
+
|
|
26
|
+
.. image:: https://readthedocs.org/projects/fujin/badge/?version=latest&style=flat
|
|
27
|
+
:alt: Documentation Status
|
|
28
|
+
|
|
29
|
+
.. image:: https://img.shields.io/pypi/v/fujin-cli.svg
|
|
30
|
+
:alt: PyPI Version
|
|
31
|
+
|
|
32
|
+
.. raw:: html
|
|
33
|
+
|
|
34
|
+
<script src="https://asciinema.org/a/687274.js" id="asciicast-687274" async="true"></script>
|
|
35
|
+
|
|
36
|
+
.. include:: ../README.md
|
|
37
|
+
:parser: myst_parser.sphinx_
|
|
38
|
+
:start-after: <!-- content:start -->
|
|
39
|
+
:end-before: <!-- content:end -->
|
|
40
|
+
|
|
41
|
+
.. toctree::
|
|
42
|
+
:maxdepth: 2
|
|
43
|
+
:caption: Contents:
|
|
44
|
+
:hidden:
|
|
45
|
+
|
|
46
|
+
installation
|
|
47
|
+
tutorial
|
|
48
|
+
configuration
|
|
49
|
+
commands/index
|
|
50
|
+
hooks
|
|
51
|
+
changelog
|
|
52
|
+
|