どのようにnextcloudをインストールするには、使用可能なと地形?


それで、私は私の人生からGoogleサービスを取り除くことに取り組んでいました.いくつかの主要なサービスは、Gdrive、カレンダー、Gmail、およびGoogleの写真が含まれます.もちろん、これらすべてをホストしようとすると、高価な権利になりますか?それは実際にある必要はありません.NextCloudはすべてのボックスの上に大部分を支援する1つのソリューションです.メールは奇妙な男だが、私は将来のポストでそれを見てみましょう.
NextCloudは、クラウドで自己ホスティングファイルのための優れたオープンソースソリューションです.だけでなく、それはストレージ、共有、および検索機能を提供するだけでなく、カレンダー、連絡先、メールを提供し、はるかに市場の場所を介して.Googleのドライブと同じように、ブラウザでOfficeドキュメントを編集する機能もあります.それ以上の遅れがなければ、nextcloudをインストールしましょう.

ℹ️
I will be installing Nextcloud to Digital Ocean. However, you can install Nextcloud on your cloud of choice.
Creating the infrastructure
Using Terraform


インフラストラクチャを作成する前に、プロジェクト構造がどのように見えるかを示します.今のところ、私たちはNextCloudで働いています.tfファイル.
.
├── nextcloud.tf
私たちはterraformを使用してインフラストラクチャを作成します.Terraformは、我々はインフラストラクチャ管理を自動化することができます素晴らしいツールです.プロジェクト、サーバー、ファイルストレージバケット、およびアラートを作成するには、次のTerraform Specを使用します.
terraform {
  required_providers {
    digitalocean = {
      source = "digitalocean/digitalocean"
      version = "~> 2.0"
    }
  }
}

# Set the variable value in *.tfvars file
# or using -var="do_token=..." CLI option
variable "do_token" {
  type = string
}

variable "do_spaces_access_id" {
  type = string
}

variable "do_spaces_secret_key" {
  type = string
}

variable "ssh_key_id" {
  type = number
}

variable "alert_email" {
  type = string
}

# Configure the DigitalOcean Provider
provider "digitalocean" {
  token = var.do_token
  spaces_access_id = var.do_spaces_access_id
  spaces_secret_key = var.do_spaces_secret_key
}

resource "digitalocean_droplet" "[server_name]" {
  image  = "ubuntu-20-04-x64"
  name   = "nextcloud-server-1"
  region = "tor1"
  size   = "s-1vcpu-2gb"
  monitoring = true
  ssh_keys = [var.ssh_key_id]
  tags = ["document", "nextcloud"]
  droplet_agent = true
  graceful_shutdown = true
}

resource "digitalocean_spaces_bucket" "[bucket_name]" {
  name = "com.sfisoftware.documents"
  region = "nyc3"
} 

resource "digitalocean_project" "[project_name]" {
  name        = "Documents"
  description = "Project for housing documents."
  purpose     = "Document hosting"
  environment = "Production"
  resources   = [
    digitalocean_droplet.nextcloud_server.urn, 
    digitalocean_spaces_bucket.sfisoftware_documents.urn
  ]
}

resource "digitalocean_monitor_alert" "cpu_alert" {
  alerts {
    email = [var.alert_email]
  }
  window      = "5m"
  type        = "v1/insights/droplet/cpu"
  compare     = "GreaterThan"
  value       = 70
  enabled     = true
  entities    = [digitalocean_droplet.nextcloud_server.id]
  description = "Alert about CPU usage"
}
任意のプロバイダをダウンロードしてインストールするには、プロジェクトディレクトリにinitコマンドを実行します.
terraform init
あなたの好みにリソース名を変更する必要があります.あなたの選択の雲へのAPIアクセスがあることを確認します.私にとって、私はAPIトークンを持っています.また、DOUNN SpaceShortAccessRes IDとDOUNE SpaceSense SecretThyキーはS 3のようなバケットアクセスのためです.このバケツは、簡単な拡張記憶装置のためにnextcloudの範囲内で使われることができます.では、次のコマンドを実行して作成プロセスを開始しましょう.
terraform plan \
    -var "alert_email=$ALERT_EMAIL" \
    -var "do_token=$DIGITAL_OCEAN_TOKEN" \
    -var "ssh_key_id=$DIGITAL_OCEAN_SSH_KEY_ID" \
    -var "do_spaces_access_id=$DIGITAL_OCEAN_SPACES_ACCESS_ID" \
    -var "do_spaces_secret_key=$DIGITAL_OCEAN_SPACES_SECRET_KEY"

Code block for Terraform plan command

Now the plan is created let's apply it to the cloud.

terraform apply \
    -var "alert_email=$ALERT_EMAIL" \
    -var "do_token=$DIGITAL_OCEAN_TOKEN" \
    -var "ssh_key_id=$DIGITAL_OCEAN_SSH_KEY_ID" \
    -var "do_spaces_access_id=$DIGITAL_OCEAN_SPACES_ACCESS_ID" \
    -var "do_spaces_secret_key=$DIGITAL_OCEAN_SPACES_SECRET_KEY"
あなたは変更を承認するプロンプトを取得します.続行するにはYesを入力する必要があります.このコマンドの最後に、仮想マシン、S 3のようなバケット、アラート/モニタのすべてが新しいプロジェクトに割り当てられます.

ℹ️
If you want to destroy the infrastructure and start again just use the following command


terraform destroy -var "alert_email=$ALERT_EMAIL" -var "do_token=$DIGITAL_OCEAN_TOKEN" -var "ssh_key_id=$DIGITAL_OCEAN_SSH_KEY_ID" -var "do_spaces_access_id=$DIGITAL_OCEAN_SPACES_ACCESS_ID" -var "do_spaces_secret_key=$DIGITAL_OCEAN_SPACES_SECRET_KEY"

nextcloudをインストールするには?


私たちのインフラストラクチャが設定されているので、関連する可用性ファイルを作成しましょう.次のコマンドを実行して、nextCloudロールを作成します.
ansible-galaxy init nextcloud-role
コマンドが完了したら、手動で次のファイルを作成します.YAMLプロジェクトのルートでは、Dockerの構成.山口大nextcloudロールの下にあるテンプレートフォルダーの中のJ 2と要件.再びYAMLの根.
.
├── nextcloud-role
│   ├── defaults
│   │   └── main.yml
│   ├── files
│   ├── handlers
│   │   └── main.yml
│   ├── meta
│   │   └── main.yml
│   ├── README.md
│   ├── tasks
│   │   └── main.yml
│   ├── templates
│   │   └── docker-compose.yaml.j2
│   ├── tests
│   │   ├── inventory
│   │   └── test.yml
│   └── vars
│       └── main.yml
├── nextcloud.tf
├── playbook.yaml
├── requirements.yaml
プロジェクトフォルダは上記のようになります.次のコンテンツをコピーして貼り付けます.YAMLを実行し、依存関係をインストールするコマンドを実行します.
---
roles:
  - name: geerlingguy.certbot
    version: 5.0.0

  - name: geerlingguy.docker
    version: 4.1.3

  - name: geerlingguy.nginx
    version: 3.1.0
ansible-galaxy install requirements.yaml
依存関係がインストールされた後、メインタスクを作成する時間です.メイン/タスクを開きます.YMLファイルをペーストして、以下の内部をペーストします.
---
- name: Create docker-compose file
  template:
    src: docker-compose.yaml.j2
    dest: /root/docker-compose.yaml

- name: Deploy Nextcloud stack
  command: docker-compose up -d

- name: Run Nextcloud cron every 5 minutes
  ansible.builtin.cron:
    name: "Nexcloud cron"
    minute: "*/5"
    job: "docker exec -u www-data root_app_1 php cron.php"
上記のタスクをすべて行うには、Dockerをリモートサーバーにコピーし、Dockerを使用してNextCloudインスタンスを起動し、NextCloudのバックグラウンドジョブを実行するトウモロコシジョブを作成します.
次に、Dockerを作成するときです.YAMLファイル.完全なファイル名がDocker構成であるように、我々はJinja 2テンプレート形式を使用するつもりです.山口大J 2.以下はファイルの内容です.
version: '3'

volumes:
  nextcloud:
  db:

services:
  db:
    image: mariadb:10.7.3
    restart: always
    command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW
    volumes:
      - db:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD="{{ lookup('env', 'NEXTCLOUD_MYSQL_ROOT_PASSWORD') }}"
      - MYSQL_PASSWORD="{{ lookup('env', 'NEXTCLOUD_MYSQL_PASSWORD') }}"
      - MYSQL_DATABASE=nextcloud
      - MYSQL_USER=nextcloud

  app:
    image: nextcloud:22.2.6
    restart: always
    ports:
      - 8080:80
    links:
      - db
    volumes:
      - nextcloud:/var/www/html
    environment:
      - MYSQL_PASSWORD="{{ lookup('env', 'NEXTCLOUD_MYSQL_PASSWORD') }}"
      - MYSQL_DATABASE=nextcloud
      - MYSQL_USER=nextcloud
      - MYSQL_HOST=db
作成ファイルでは、使用するデータベース、および使用するバージョンのnextcloudを指定します.書き込み時に、22.2.6は最新の製造準備版です.あなたは、最新バージョンが何でこのバージョン番号を更新することができます.ここでは様々なデータベースとユーザ情報を指定します.環境変数を使って、敏感な値を指定します.ポートnextcloudが動いていることに注意してください.心配しないでください、nginxとcertbotでnextcloudインスタンスをproxyingし、確保するでしょう.
最後に、それは脚本を作成する時間です.YAMLプロジェクトのルーツ.ファイルに次のペーストをコピーします.
---
- hosts: all
  vars:
    certbot_admin_email: "{{ lookup('env', 'ALERT_EMAIL') }}"
    certbot_create_if_missing: true
    certbot_create_standalone_stop_services: []
    certbot_certs:
      - domains:
          - [DOMAIN]
    nginx_upstreams:
      - name: nextcloud
        strategy: "ip_hash" # "least_conn", etc.
        servers:
          - "localhost:8080"
    nginx_vhosts:
      - listen: "80"
        server_name: "[DOMAIN]"
        return: "301 https://[DOMAIN]$request_uri"
        filename: "[DOMAIN].80.conf"
      - listen: "443 ssl http2"
        server_name: "[DOMAIN]"
        filename: "[DOMAIN].443.conf"
        extra_parameters: |
          location / {
            proxy_buffering    off;
            proxy_set_header   X-Real-IP $remote_addr;
            proxy_set_header   X-Scheme $scheme;
            proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header   Host $http_host;
            proxy_set_header   X-Forwarded-Proto https;
            proxy_pass         http://nextcloud;
          }

          ssl_certificate     /etc/letsencrypt/live/[DOMAIN]/fullchain.pem;
          ssl_certificate_key /etc/letsencrypt/live/[DOMAIN]/privkey.pem;
          ssl_protocols       TLSv1.1 TLSv1.2;
          ssl_ciphers         HIGH:!aNULL:!MD5;
  roles:
    - role: geerlingguy.certbot
    - role: geerlingguy.docker
    - role: geerlingguy.nginx
    - role: nextcloud-role
playbookファイルでは、実行可能なロールを指定します.先頭にいくつかのcertbot変数を指定します.Certbot SSLアラートのための電子メールを設定してください.そして、nginxの上流であるnginxを設定し、nginxに対するvhostsの数を設定します.NextCloudポート8080を使用していることに注意してください.SSL設定は標準的なCertbotインストール場所を指しています.あなたのNextCloudドメインで[ドメイン]のすべての発生を変えるようにしてください.
さあ遊びましょう.
ansible-playbook -u root -i "[SERVER IP]," playbook.yaml
terraformを使って作成されたVMのIPアドレスに[サーバIP ]を変更します.パラメータにコンマを含めるようにしてください.そうでなければエラーをスローします.
すべてうまくいけば、あなたはNextCloudのあなたの非常に自身の働くインストールをするべきです.あなたがカスタマイズすることができますし、あなたの心のコンテンツを探る.
これに記載されているすべてのファイルは、以下のGithubリンクで見つかります.
Github Repo
Subscribe