🐦 Remove language options
This commit is contained in:
parent
40189a01c1
commit
aa7fae715e
15 changed files with 15 additions and 487 deletions
|
@ -4,6 +4,13 @@ In this chapter, I will describe how to build an environment on an already prepa
|
|||
|
||||
The description is based on information obtained from conversations with @inf and from [hscloud user documentation](https://code.hackerspace.pl/hswaw/hscloud/src/branch/master/cluster/doc/user.md).
|
||||
|
||||
## Requirements
|
||||
|
||||
Working nix. You can install nix with command:
|
||||
|
||||
```bash
|
||||
sh <(curl -L https://nixos.org/nix/install) --daemon
|
||||
```
|
||||
|
||||
## Steps
|
||||
|
19
README.md
19
README.md
|
@ -1,24 +1,21 @@
|
|||
# hscloud-docs
|
||||
|
||||
Intro to hscloud service creation. This set of documents aims to document the process of getting into hscloud.
|
||||
|
||||
- [english version](./en/README.md)
|
||||
- [polish version](./pl/README.md)
|
||||
Introduction to creating services in hscloud. This set of documents is intended to document the process of biting into the operation of the cloud.
|
||||
|
||||
## Preparing the environment
|
||||
|
||||
- Building on NixOS ([en](./en/01-prepare-nixos.md) / [pl](./pl/01-prepare-nixos.md))
|
||||
- Building on Ubuntu ([en](./en/01-prepare-ubuntu.md) / [pl](./pl/01-prepare-ubuntu.md))
|
||||
- [Building on NixOS](01-prepare-nixos.md)
|
||||
- [Building on Ubuntu](01-prepare-ubuntu.md)
|
||||
|
||||
## Preparing tools
|
||||
|
||||
- Building environment ([en](./en/02-build-environment.md) / [pl](./pl/02-build-environment.md))
|
||||
- [Building environment](02-build-environment.md)
|
||||
|
||||
## Deploying a sample service
|
||||
|
||||
- Deploying the ldapweb service ([en](./en/03-create-service.md) / [pl](./pl/03-create-service.md))
|
||||
- [Deploying the ldapweb service](03-create-service.md)
|
||||
|
||||
## Building and deploying own service
|
||||
## Building own service
|
||||
|
||||
- Building a simple Flask web application ([en](./en/04-build-web-app.md) / [pl](./pl/04-build-web-app.md))
|
||||
- Deploying a docker image on hscloud ([en](./en/05-deploy-web-app.md) / [pl](./pl/05-deploy-web-app.md))
|
||||
- [Building a simple Flask web application](04-build-web-app.md)
|
||||
- [Deploying docker image on hscloud](05-deploy-web-app.md)
|
21
en/README.md
21
en/README.md
|
@ -1,21 +0,0 @@
|
|||
# hscloud-docs
|
||||
|
||||
Introduction to creating services in hscloud. This set of documents is intended to document the process of biting into the operation of the cloud.
|
||||
|
||||
## Preparing the environment
|
||||
|
||||
- [Building on NixOS](01-prepare-nixos.md)
|
||||
- [Building on Ubuntu](01-prepare-ubuntu.md)
|
||||
|
||||
## Preparing tools
|
||||
|
||||
- [Building environment](02-build-environment.md)
|
||||
|
||||
## Deploying a sample service
|
||||
|
||||
- [Deploying the ldapweb service](03-create-service.md)
|
||||
|
||||
## Building own service
|
||||
|
||||
- [Building a simple Flask web application](04-build-web-app.md)
|
||||
- [Deploying docker image on hscloud](05-deploy-web-app.md)
|
|
@ -1,33 +0,0 @@
|
|||
# Kompilacja w środowisku NixOS
|
||||
|
||||
NixOS jest systemem operacyjnym, który pozwala na deklaratywne opisywanie środowiska. W tym rozdziale opisane są kroki potrzebne do zbudowania środowiska, w którym można budować usługi w chmurze.
|
||||
|
||||
W tym tutorialu została wykorzystana wersja NixOS 23.05.
|
||||
|
||||
Skrypt wykonujący dostępny w [01-build-nixos.sh](01-build-nixos.sh) wykonuje wszystkie kroki opisane w tym rozdziale.
|
||||
|
||||
## Wymagania
|
||||
|
||||
Chęć do zainstalowania NixOSa, bare metal lub wirtualnie. Wirtualizacja może być wykonana np. za pomocą [VirtualBox](https://www.virtualbox.org/).
|
||||
|
||||
## Kroki
|
||||
|
||||
Pobierz system NixOS z [nixos.org](https://nixos.org/download.html#nixos-iso) i zainstaluj go na swojej maszynie.
|
||||
|
||||
Potrzebujemy zainstalować pakiet `git` i sklonować repozytorium z kodem źródłowym usług w chmurze. W terminalu wpisujemy:
|
||||
|
||||
```bash
|
||||
nix-env -iA nixos.git
|
||||
git clone https://code.hackerspace.pl/hswaw/hscloud
|
||||
cd hscloud
|
||||
```
|
||||
|
||||
Jeśli chcemy publikować cokolwiek na gerricie, musimy wykonać dodatkowe kroki ([źródło](https://gerrit.hackerspace.pl/admin/repos/hscloud,general)):
|
||||
|
||||
```bash
|
||||
mkdir -p .git/hooks/
|
||||
curl -Lo .git/hooks/commit-msg https://gerrit.hackerspace.pl/tools/hooks/commit-msg
|
||||
chmod +x .git/hooks/commit-msg
|
||||
```
|
||||
|
||||
Następny krok: [Budowa środowiska](02-build-environment.md)
|
|
@ -1,45 +0,0 @@
|
|||
# Kompilacja w środowisku Ubuntu
|
||||
|
||||
W tym rozdziale opisane są kroki potrzebne do zbudowania środowiska, w którym można budować usługi w chmurze hscloud. Instrukcja wzoruje się na [01-build-nixos.md](01-build-nixos.md), jedynie z dodatkowym krokiem pobierania i instalacji menedżera pakietów `nix`.
|
||||
|
||||
## Wymagania
|
||||
|
||||
Uprawnienia administratora, środowisko Ubuntu 22.04 lub nowsze, bądź odpowiedni Ubuntu-like desktop.
|
||||
|
||||
## Kroki
|
||||
|
||||
Instalujemy pakiety `git` oraz `curl`:
|
||||
|
||||
```bash
|
||||
sudo apt update
|
||||
sudo apt install git curl
|
||||
```
|
||||
|
||||
Pobieramy i instalujemy menadżer pakietów `nix` (źródło: [nixos.org](https://nixos.org/download)):
|
||||
|
||||
```bash
|
||||
sh <(curl -L https://nixos.org/nix/install) --daemon
|
||||
```
|
||||
|
||||
Po tej operacji należy wylogować się i zalogować ponownie, aby móc korzystać z `nix`.
|
||||
|
||||
```bash
|
||||
reboot # overkill, ale pewne
|
||||
```
|
||||
|
||||
Klonujemy repozytorium z kodem źródłowym usług w chmurze:
|
||||
|
||||
```bash
|
||||
git clone https://code.hackerspace.pl/hswaw/hscloud
|
||||
cd hscloud
|
||||
```
|
||||
|
||||
Jeśli chcemy publikować cokolwiek na gerricie, musimy wykonać dodatkowe kroki ([źródło](https://gerrit.hackerspace.pl/admin/repos/hscloud,general)):
|
||||
|
||||
```bash
|
||||
mkdir -p .git/hooks/
|
||||
curl -Lo .git/hooks/commit-msg https://gerrit.hackerspace.pl/tools/hooks/commit-msg
|
||||
chmod +x .git/hooks/commit-msg
|
||||
```
|
||||
|
||||
Następny krok: [Budowa środowiska](02-build-environment.md)
|
|
@ -1,57 +0,0 @@
|
|||
# Budowa środowiska
|
||||
|
||||
W tym rozdziale przedstawię, jak na przygotowanej już platformie (NixOS, Ubuntu, etc.) zbudować środowisko, w którym będziemy budować usługi w chmurze hscloud.
|
||||
|
||||
Opis opiera się na informacjach uzyskanych z rozmów z @inf oraz z [dokumentacji użytkownika hscloud](https://code.hackerspace.pl/hswaw/hscloud/src/branch/master/cluster/doc/user.md).
|
||||
|
||||
## Kroki
|
||||
|
||||
Tworzymy środowisko, w którym będziemy budować usługi. W tym celu tworzymy środowisko na podstawie definicji w pliku `shell.nix`:
|
||||
|
||||
```bash
|
||||
nix-shell
|
||||
```
|
||||
|
||||
Używamy teraz narzędzia `bazel`, aby zbudować i uruchomić potrzebne usługi, m.in. `prodaccess` oraz `kubectl`:
|
||||
|
||||
```bash
|
||||
bazel build //tools:install
|
||||
bazel run //tools:install
|
||||
```
|
||||
|
||||
Teraz możemy poprosić o przyznanie nam dostępu do klastra hscloud poprzez narzędzie [prodaccess](https://pkg.go.dev/code.hackerspace.pl/hscloud/cluster/prodaccess#section-readme). w miejsce `$hs_username` należy wstawić nazwę użytkownika w SSO hackerspejsu:
|
||||
|
||||
```bash
|
||||
hs_username=$USER # if your username is the same as your SSO username
|
||||
prodaccess -username $hs_username
|
||||
```
|
||||
|
||||
W przypadku braku dostępu do klastra, należy skontaktować się w ramach [Matrix](https://matrix.hackerspace.pl/) z [@q3k](q3k:hackerspace.pl) bądź z [@inf](informatic:hackerspace.pl).
|
||||
|
||||
Aby sprawdzić, czy mamy dostęp do klastra, możemy wykonać polecenie:
|
||||
|
||||
```bash
|
||||
# pokazuje wersję Kubernetesów
|
||||
kubectl version
|
||||
|
||||
# pokazuje statystyki klastra
|
||||
kubectl top nodes
|
||||
```
|
||||
|
||||
Możemy również wywołać publiczny obraz Dockera (ponownie, w miejsce `$hs_username` należy wstawić nazwę użytkownika w SSO hackerspejsu):
|
||||
|
||||
```bash
|
||||
# aby utworzyć instancję (pod) alpine
|
||||
kubectl -n personal-$hs_username run --image=alpine:latest -it foo
|
||||
```
|
||||
|
||||
If you want to delete the instance, run:
|
||||
|
||||
```bash
|
||||
# aby skasować instancję (pod) alpine
|
||||
kubectl -n personal-$hs_username delete pod foo
|
||||
```
|
||||
|
||||
## Następny krok
|
||||
|
||||
Następny krok: [Tworzenie usługi http](03-create-service.md)
|
|
@ -1,98 +0,0 @@
|
|||
# Tworzenie publicznej usługi w hscloud
|
||||
|
||||
W tym rozdziale przedstawię, jak stworzyć usługę, która będzie dostępna publicznie w Internecie.
|
||||
|
||||
## Tworzenie kopii ldapweb
|
||||
|
||||
Zaczynamy od włączenia środowiska nix-shell:
|
||||
|
||||
```bash
|
||||
cd hscloud
|
||||
nix-shell
|
||||
```
|
||||
|
||||
Zaczynamy w katalogu `hscloud`, z włączonym środowiskiem `nix-shell`. Jeśli w folderze `//personal` jeszcze nie masz swojej przestrzeni nazw, to ją tworzymy:
|
||||
|
||||
```bash
|
||||
mkdir personal/$hs_username
|
||||
```
|
||||
|
||||
Kopiujemy do przestrzeni roboczej konfigurację usługi `ldapweb`:
|
||||
|
||||
```bash
|
||||
cp -r hswaw/ldapweb/ personal/$hs_username/
|
||||
cd personal/$hs_username/ldapweb/
|
||||
```
|
||||
|
||||
## Modyfikacja usługi
|
||||
|
||||
Konfiguracja `ldapweb` zawiera się w pliku `prod.jsonnet`. Format `jsonnet` jest bardzo podobny do `json`, ale pozwala na użycie zmiennych, funkcji oraz importowanie innych plików.
|
||||
|
||||
Interesuje nas początkowy fragment pliku:
|
||||
|
||||
```jsonnet
|
||||
local kube = import "../../kube/kube.libsonnet";
|
||||
|
||||
{
|
||||
local top = self,
|
||||
local cfg = self.cfg,
|
||||
|
||||
cfg:: {
|
||||
name: 'ldapweb',
|
||||
namespace: 'ldapweb',
|
||||
domain: 'profile.hackerspace.pl',
|
||||
image: 'registry.k0.hswaw.net/radex/ldap-web:1695486391',
|
||||
},
|
||||
...
|
||||
}
|
||||
```
|
||||
|
||||
Import następuje z pliku `kube.libsonnet` w folderze `kube` w folderze `hscloud`. Aby w tym wypadku import przebiegał poprawnie, potrzebujemy cofnąć się o jeden folder więcej: `../../../kube/kube.libsonnet`.
|
||||
|
||||
Konfiguracja `hscloud` pozwala na przestrzeń nazw jedynie w formacie `personal-$hs_username`. Dodatkowo, musimy zmienić domenę na `*.$hs_username.hscloud.ovh`. Na końcu, zmieniamy nazwę usługi na `test`.
|
||||
|
||||
|
||||
Ostatecznie, powyższy fragment pliku `prod.jsonnet` powinien wyglądać tak (pamiętaj o podmianie `$hs_username` na swoją nazwę użytkownika!):
|
||||
|
||||
```jsonnet
|
||||
local kube = import "../../../kube/kube.libsonnet";
|
||||
|
||||
{
|
||||
local top = self,
|
||||
local cfg = self.cfg,
|
||||
|
||||
cfg:: {
|
||||
name: 'test',
|
||||
namespace: 'personal-$hs_username',
|
||||
domain: 'test.$hs_username.hscloud.ovh',
|
||||
image: 'registry.k0.hswaw.net/radex/ldap-web:1695486391',
|
||||
},
|
||||
...
|
||||
}
|
||||
```
|
||||
|
||||
Logujemy się do klastra:
|
||||
|
||||
```bash
|
||||
prodaccess -username $hs_username
|
||||
```
|
||||
|
||||
Wywołujemy komendę zastosowania zmian:
|
||||
|
||||
```bash
|
||||
kubecfg update prod.jsonnet
|
||||
```
|
||||
|
||||
Nasza usługa powinna być pod adresem `https://test.$hs_username.hscloud.ovh/`. W trakcie pierwszych paru minut dostaniemy informację o niepoprawnym certyfikacie, ponieważ usługa Let's Encrypt nie zdążyła jeszcze wygenerować certyfikatu dla naszej domeny.
|
||||
|
||||
Aby usunąć usługę, należy wywołać:
|
||||
|
||||
```bash
|
||||
kubecfg delete prod.jsonnet
|
||||
```
|
||||
|
||||
lub
|
||||
|
||||
```bash
|
||||
kubectl delete service test -n personal-$hs_username
|
||||
```
|
|
@ -1,111 +0,0 @@
|
|||
# Tworzenie własnej usługi internetowej Flask
|
||||
|
||||
W tym rozdziale zbudujemy własną usługę sieciową przy użyciu frameworka Flask, dockeryzujemy ją i zarejestrujemy w rejestrze.
|
||||
|
||||
## Wymagania
|
||||
|
||||
W tym przykładzie wymagany będzie `docker`. Zainstaluj go ze swojej standardowej powłoki.
|
||||
|
||||
```bash
|
||||
curl -fsSL https://get.docker.com -o get-docker.sh
|
||||
sudo sh get-docker.sh
|
||||
```
|
||||
|
||||
W rzeczywistości można utworzyć, zbudować i zarejestrować obraz docker w zupełnie innym środowisku i po prostu wdrożyć go na kubernetes w środowisku hscloud.
|
||||
|
||||
## Kroki
|
||||
|
||||
Stworzymy prostą aplikację Flask:
|
||||
|
||||
```py
|
||||
# app.py
|
||||
|
||||
from flask import Flask
|
||||
|
||||
app = Flask(__name__)
|
||||
|
||||
@app.route('/')
|
||||
|
||||
def hello_world():
|
||||
return 'Hello, World!'
|
||||
|
||||
if __name__ == '__main__':
|
||||
app.run()
|
||||
```
|
||||
|
||||
Możemy sprawdzić, czy aplikacja działa, uruchamiając ją:
|
||||
|
||||
```bash
|
||||
pip3 install flask
|
||||
python3 app.py
|
||||
```
|
||||
|
||||
Teraz tworzymy plik `Dockerfile` dla naszej aplikacji:
|
||||
|
||||
```Dockerfile
|
||||
# Use an official Python runtime as a base image
|
||||
FROM python:3.8-slim-buster
|
||||
|
||||
# Set the working directory in docker
|
||||
WORKDIR /app
|
||||
|
||||
# Copy the current directory contents into the container at /app
|
||||
COPY . /app
|
||||
|
||||
# Install any needed packages specified in requirements.txt
|
||||
RUN pip install --upgrade pip && \
|
||||
pip install flask gunicorn
|
||||
|
||||
# Set environment variables
|
||||
ENV FLASK_APP=app.py
|
||||
ENV FLASK_RUN_HOST=0.0.0.0
|
||||
|
||||
# Expose port 5000 for the Flask app to listen on
|
||||
EXPOSE 5000
|
||||
|
||||
# Define command to run the application using gunicorn
|
||||
CMD ["gunicorn", "-w", "4", "-b", ":5000", "app:app"]
|
||||
```
|
||||
|
||||
Możemy sprawdzić, czy aplikacja działa w Dockerze:
|
||||
|
||||
```bash
|
||||
docker build -t myflask . # Build the image
|
||||
docker run -d -p 5000:5000 myflask # Run the container
|
||||
```
|
||||
|
||||
Otwieramy przeglądarkę pod adresem `http://localhost:5000`.
|
||||
|
||||
## Przesyłanie obrazu do rejestru
|
||||
|
||||
Najpierw musimy uwierzytelnić się w rejestrze:
|
||||
|
||||
```
|
||||
https://registry.k0.hswaw.net
|
||||
```
|
||||
|
||||
Otrzymasz polecenie podobne do:
|
||||
|
||||
```
|
||||
docker login -u $hs_username -p *************** https://registry.k0.hswaw.net
|
||||
```
|
||||
|
||||
|
||||
Teraz musimy utworzyć lokalny serwer dla naszego obrazu docker:
|
||||
|
||||
```bash
|
||||
docker tag myflask registry.k0.hswaw.net/$hs_username/myflask:latest
|
||||
docker push registry.k0.hswaw.net/$hs_username/myflask:latest
|
||||
```
|
||||
|
||||
Aby sprawdzić, czy obraz znajduje się w rejestrze:
|
||||
|
||||
```bash
|
||||
curl -X GET https://registry.k0.hswaw.net/v2/$hs_username/myflask/tags/list
|
||||
```
|
||||
|
||||
Aby usunąć obraz z rejestru:
|
||||
|
||||
```bash
|
||||
docker rmi registry.k0.hswaw.net/$hs_username/myflask:latest
|
||||
```
|
|
@ -1,90 +0,0 @@
|
|||
# Wdrażanie obrazu docker na hscloud
|
||||
|
||||
W tym rozdziale wdrożymy nasz zarejestrowany obraz docker na hscloud jako prostą usługę webową z HTTPS z Let's Encrypt.
|
||||
|
||||
## Wymagania
|
||||
|
||||
Potrzebujemy zarejestrowanego obrazu docker w rejestrze. Jeśli go nie masz, możesz go utworzyć, postępując zgodnie z rozdziałem [Building your own Flask web service](04-build-web-app.md). Potrzebujemy również działającej autoryzacji `prodaccess` (szczegóły: [Budowa środowiska](./02-build-environment.md)).
|
||||
|
||||
## Kroki
|
||||
|
||||
Tworzymy plik `prod.jsonnet` dla naszej aplikacji w lokalizacji `//personal/$hs_username/myflask/`:
|
||||
|
||||
```jsonnet
|
||||
# Pamiętaj, aby zastąpić $hs_username nazwą użytkownika SSO!
|
||||
|
||||
local kube = import "../../../kube/kube.libsonnet";
|
||||
|
||||
{
|
||||
local top = self,
|
||||
local cfg = self.cfg,
|
||||
|
||||
cfg:: {
|
||||
name: 'web-app',
|
||||
namespace: 'personal-$hs_username',
|
||||
domain: 'web-app.$hs_username.hscloud.ovh',
|
||||
image: 'registry.k0.hswaw.net/$hs_username/myflask:latest',
|
||||
},
|
||||
|
||||
ns: kube.Namespace(cfg.namespace),
|
||||
|
||||
deployment: top.ns.Contain(kube.Deployment(cfg.name)) {
|
||||
spec+: {
|
||||
replicas: 1,
|
||||
template+: {
|
||||
spec+: {
|
||||
containers_: {
|
||||
default: kube.Container("default") {
|
||||
image: cfg.image,
|
||||
ports_: {
|
||||
http: { containerPort: 5000 },
|
||||
}
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
service: top.ns.Contain(kube.Service(cfg.name)) {
|
||||
target_pod:: top.deployment.spec.template,
|
||||
},
|
||||
|
||||
ingress: top.ns.Contain(kube.Ingress(cfg.name)) {
|
||||
metadata+: {
|
||||
annotations+: {
|
||||
"kubernetes.io/tls-acme": "true",
|
||||
"cert-manager.io/cluster-issuer": "letsencrypt-prod",
|
||||
"nginx.ingress.kubernetes.io/proxy-body-size": "0",
|
||||
},
|
||||
},
|
||||
spec+: {
|
||||
tls: [ { hosts: [ cfg.domain ], secretName: cfg.name + "-tls" } ],
|
||||
rules: [
|
||||
{
|
||||
host: cfg.domain,
|
||||
http: {
|
||||
paths: [
|
||||
{ path: "/", backend: top.service.name_port },
|
||||
],
|
||||
},
|
||||
},
|
||||
],
|
||||
},
|
||||
},
|
||||
}
|
||||
```
|
||||
|
||||
Możemy teraz wdrożyć naszą aplikację:
|
||||
|
||||
```bash
|
||||
kubecfg update prod.jsonnet
|
||||
```
|
||||
|
||||
Aplikacja powinna być dostępna pod adresem `http://web-app.$hs_username.hscloud.ovh`. Należy poczekać kilka sekund na działającą usługę HTTPS.
|
||||
|
||||
Aby usunąć aplikację:
|
||||
|
||||
```bash
|
||||
kubecfg delete prod.jsonnet
|
||||
```
|
21
pl/README.md
21
pl/README.md
|
@ -1,21 +0,0 @@
|
|||
# hscloud-docs
|
||||
|
||||
Wprowadzenie do tworzenia usług w hscloud. Niniejszy zestaw dokumentów ma na celu dokumentację procesu wgryzania się w działanie chmury.
|
||||
|
||||
## Przygotowanie środowiska
|
||||
|
||||
- [Budowa na NixOS](01-prepare-nixos.md)
|
||||
- [Budowa na Ubuntu](01-prepare-ubuntu.md)
|
||||
|
||||
## Przygotowywanie narzędzi
|
||||
|
||||
- [Budowanie środowiska](02-build-environment.md)
|
||||
|
||||
## Wdrażanie przykładowej usługi
|
||||
|
||||
- [Wdrażanie usługi ldapweb](03-create-service.md)
|
||||
|
||||
## Budowanie własnej usługi
|
||||
|
||||
- [Tworzenie prostej aplikacji internetowej Flask](04-build-web-app.md)
|
||||
- [Wdrażanie aplikacji internetowej](05-deploy-web-app.md)
|
Loading…
Reference in a new issue