Nach Cache drive Upgrade geht Swag nicht mehr


Zeze21
Go to solution Solved by Zeze21,

Recommended Posts

Hallo,

ich habe meine Cache Drives geupdated und im Anschluss funktionierte Swag nicht mehr. (Zertifikatefehler)

Nun gut ich dachte ich ich deinstalliere Swag einfach installiere es neu - die Einstellungen bleiben ja gespeichert.

Um es kurz zu machen die Einstellungen blieben nicht gespeichert (warum sie das nicht taten oder ich dachte sie würden gespeichert bleiben weiß ich nicht.

 

Jedenfalls kommt jetzt folgendes in meinen Logs:

Generating a RSA private key
...................+++++
............................................................................................+++++
writing new private key to '/config/keys/cert.key'
req: Can't open "/config/keys/cert.key" for writing, No such file or directory
cont-init: info: /etc/cont-init.d/15-keygen exited 1
cont-init: info: running /etc/cont-init.d/20-permissions
cont-init: info: /etc/cont-init.d/20-permissions exited 0
cont-init: info: running /etc/cont-init.d/30-test-run
cont-init: info: /etc/cont-init.d/30-test-run exited 0
cont-init: info: running /etc/cont-init.d/31-require-url
cont-init: info: /etc/cont-init.d/31-require-url exited 0
cont-init: info: running /etc/cont-init.d/40-folders
cont-init: info: /etc/cont-init.d/40-folders exited 0
cont-init: info: running /etc/cont-init.d/41-samples
cont-init: info: /etc/cont-init.d/41-samples exited 0
cont-init: info: running /etc/cont-init.d/42-fail2ban
cont-init: info: /etc/cont-init.d/42-fail2ban exited 0
cont-init: info: running /etc/cont-init.d/43-crontabs
cont-init: info: /etc/cont-init.d/43-crontabs exited 0
cont-init: info: running /etc/cont-init.d/45-nginx
cont-init: info: /etc/cont-init.d/45-nginx exited 0
cont-init: info: running /etc/cont-init.d/50-certbot
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Some challenges have failed.
Ask for help or search for solutions at https://community.letsencrypt.org. See the logfile /var/log/letsencrypt/letsencrypt.log or re-run Certbot with -v for more details.
generating self-signed keys in /config/keys, you can replace these with your own keys if required
Variables set:
PUID=99
PGID=100
TZ=Earth/Notthemoon
URL=someth.ing
SUBDOMAINS=media,remote,cloud,heim,vaultwarden,home,dns,vpn 
EXTRA_DOMAINS=
ONLY_SUBDOMAINS=false
VALIDATION=http
CERTPROVIDER=
DNSPLUGIN=cloudflare
EMAIL=
STAGING=false

Using Let's Encrypt as the cert provider
SUBDOMAINS entered, processing
SUBDOMAINS entered, processing
Sub-domains processed are:  -d media.someth.ing -d remote.someth.ing -d cloud.someth.ing -d heim.someth.ing -d vaultwarden.someth.ing -d home.someth.ing -d dns.someth.ing -d vpn.someth.ing
No e-mail address entered or address invalid
http validation is selected
Generating new certificate
Requesting a certificate for someth.ing and 8 more domains

Certbot failed to authenticate some domains (authenticator: standalone). The Certificate Authority reported these problems:
  Domain: cloud.someth.ing
  Type:   connection
  Detail: 123.123.123.123: Fetching http://cloud.someth.ing/.well-known/acme-challenge/TFM2aahaHuzkeF_d3JlgRf34fhFfqC0_l8N0Aw3qMFMlUrQ: Connection refused

  Domain: heim.someth.ing
  Type:   connection
  Detail: 123.123.123.123: Fetching http://heim.someth.ing/.well-known/acme-challenge/_OXa4rQmZKhH982JAvd13r413rGk_ZIdm6kx_pF-JUmPVIX3OY: Connection refused

  Domain: home.someth.ing
  Type:   connection
  Detail: 123.123.123.123: Fetching http://home.someth.ing/.well-known/acme-challenge/7Xq1Vjo1ZR6dOSiX1324r123rJi5aYJeCigDKCPi1mHdNcIvU_EE: Connection refused

  Domain: media.someth.ing
  Type:   connection
  Detail: 123.123.123.123: Fetching http://media.someth.ing/.well-known/acme-challenge/dK8mCAyIq3T38123r123rkg4Wp4YcgiyB6md0WSmt97H4wdvL5g: Connection refused

  Domain: remote.someth.ing
  Type:   connection
  Detail: 123.123.123.123: Fetching http://remote.someth.ing/.well-known/acme-challenge/AS2smMKhEpJJ123r12rqwer1cyANNFgiodXtvs2oaRvNn_mJ5s56nQk: Connection refused

  Domain: vaultwarden.someth.ing
  Type:   connection
  Detail: 123.123.123.123: Fetching http://vaultwarden.someth.ing/.well-known/acme-challenge/HrwJXNU7ON7NC734rwe161fr4sw8TbDN9oof_U6yu2dcFdMsc: Connection refused

  Domain: vpn.someth.ing
  Type:   connection
  Detail: 123.123.123.123: Fetching http://vpn.someth.ing/.well-known/acme-challenge/vyu-Jjts2rDZ1yoB1yLcxPxqxw8LjsCXkETUhdzNh5A: Connection refused

  Domain: dns.someth.ing
  Type:   unauthorized
  Detail: 234.234.234.234: Invalid response from http://dns.someth.ing/.well-known/acme-challenge/tQRg2gRosn135e2OBDFPpn3-Xi5HG_MnrZAbBpYykn83A4ug: 404

  Domain: someth.ing
  Type:   unauthorized
  Detail: 234.234.234.234: Invalid response from http://someth.ing/.well-known/acme-challenge/R3_yIrvfcHqc03WVu145r3fT-EwM4EX5SEa5Sxrym-5hHqiiM: 404

Hint: The Certificate Authority failed to download the challenge files from the temporary standalone webserver started by Certbot on port 80. Ensure that the listed domains point to this machine and that it can accept inbound connections from the internet.

ERROR: Cert does not exist! Please see the validation error above. The issue may be due to incorrect dns or port forwarding settings. Please fix your settings and recreate the container

Irgendwie scheinen die Rechte nicht mehr ganz zu stimmen.

Wie gehe ich denn am besten vor, so dass ich am besten eine saubere Lösung mit Swag schaffe?

Wie aus dem Log ersichtlich wird habe ich someth.ing als main Domain dns.someth.ing wird eigentlich von meiner Fritzbox mit meiner eigenen Ip geupdated, Die restlichen domains sind als CName hinterlegt.

 

Danke schonmal an jegliche Hilfe

Link to comment
5 hours ago, Zeze21 said:

Um es kurz zu machen die Einstellungen blieben nicht gespeichert (warum sie das nicht taten oder ich dachte sie würden gespeichert bleiben weiß ich nicht.

 

deine Einstellungen liegen in der Regel in /mnt/user/appdata/xyz und beim cache ist das in der Regel liegt das auf dem cache drive ...

 

5 hours ago, Zeze21 said:

ich habe meine Cache Drives geupdated und im Anschluss funktionierte Swag nicht mehr. (Zertifikatefehler)

 

hattest du die vorhandenen Daten kopiert ? Backup gemacht und wiedereigespielt ?

 

5 hours ago, Zeze21 said:
  Detail: 123.123.123.123: Fetching http://cloud.someth.ing/.well-known/acme-challenge/TFM2aahaHuzkeF_d3JlgRf34fhFfqC0_l8N0Aw3qMFMlUrQ: Connection refused

sicher das dein Port 80 und 443 in deiner Fritz auf swag zeigen ?

Link to comment
15 hours ago, alturismo said:

deine Einstellungen liegen in der Regel in /mnt/user/appdata/xyz und beim cache ist das in der Regel liegt das auf dem cache drive ...

 

Das ist korrekt.

 

Quote

hattest du die vorhandenen Daten kopiert ? Backup gemacht und wiedereigespielt ?

 

Per Mover, also die jeweiligen freigaben bzgl des cache auf yes geändert dann mover gestartet, dann waren die Daten aufm array, dann cache drives ausgetauscht, eigenschaften der shares wieder zurück geändert, mover wieder angeworfen.

Initial waren auch die Einstellungen da, aber funktioniert hat es halt nicht. daraufhin habe ich das Docker image gelöscht / swag deinstalliert und neu installiert. Ich war der Meinung dass damit die alten Einstellungen wieder da wären - waren sie leider nicht.

 

Quote

sicher das dein Port 80 und 443 in deiner Fritz auf swag zeigen ?

 

Naja also mit den Ports ist das so ne Sache

Inital hab ich ja mal die Anleitung (wie wohl viele von uns) von Spaceinvader One befolgt. Und dort wurde der externe Port 80 auf 180 geändert und 443 auf 1443

Diese Portweiterleitung hatte ich in der Fritzbox auch so angelegt. Und inital (also vor dem plattentausch) hat das auch wunderbar funktioniert.

Bei Swag habe ich auch die ports 1443  und 180 eingetragen...

Dies hat jetzt nicht mehr funktioniert. Wenn ich Swag als Host laufen lies hat er automatisch auf 443 und 80 geändert und lies sich nicht auf 1443 oder 180 überreden. 

Im Bridge modus hatte er zwar die richtigen Ports (also 1433 und 180) aber eine völlig falsche ip....

Ih verzweifel jetzt langsam - jetzt habe ich die Ports von der Fritz auf 443 und 80 geändert und jetzt komme ich zumindest auf jellyfin aber nextcloud geht nicht (jellyfin geht auch nur unter dem Hinweis dass die Verbindung nicht sicher sei ...

Edited by Zeze21
Link to comment

Ich werde es jetzt nochmal komplett neu machen. 

Alles von vorne...

Es ist etwas frustierend aber hoffentlich geht's dann. 

Ich hoffe http ist die richtige validierungsmethode für all-inkl

Ganz Blöde Frage:

Was sind denn die Vor- und Nachteile wenn ich die ganzen Container (also auch Swag) als Custom laufen lasse?

Link to comment

es geht natürlich immer noch nicht

in den logs ist mir noch was zusätzliches aufgefallen:

cont-init: info: /etc/cont-init.d/10-adduser exited 0
cont-init: info: running /etc/cont-init.d/11-folders
cont-init: info: /etc/cont-init.d/11-folders exited 0
cont-init: info: running /etc/cont-init.d/12-samples
cont-init: info: /etc/cont-init.d/12-samples exited 0
cont-init: info: running /etc/cont-init.d/13-nginx
cont-init: info: /etc/cont-init.d/13-nginx exited 0
cont-init: info: running /etc/cont-init.d/14-php
cont-init: info: /etc/cont-init.d/14-php exited 0
cont-init: info: running /etc/cont-init.d/15-keygen
Generating a RSA private key
............................................................................+++++
...........................................................................+++++
writing new private key to '/config/keys/cert.key'
req: Can't open "/config/keys/cert.key" for writing, No such file or directory
cont-init: info: /etc/cont-init.d/15-keygen exited 1
cont-init: info: running /etc/cont-init.d/20-permissions
cont-init: info: /etc/cont-init.d/20-permissions exited 0
cont-init: info: running /etc/cont-init.d/30-test-run
cont-init: info: /etc/cont-init.d/30-test-run exited 0
cont-init: info: running /etc/cont-init.d/31-require-url
cont-init: info: /etc/cont-init.d/31-require-url exited 0
cont-init: info: running /etc/cont-init.d/40-folders
cont-init: info: /etc/cont-init.d/40-folders exited 0
cont-init: info: running /etc/cont-init.d/41-samples
cont-init: info: /etc/cont-init.d/41-samples exited 0
cont-init: info: running /etc/cont-init.d/42-fail2ban
cont-init: info: /etc/cont-init.d/42-fail2ban exited 0
cont-init: info: running /etc/cont-init.d/43-crontabs
cont-init: info: /etc/cont-init.d/43-crontabs exited 0
cont-init: info: running /etc/cont-init.d/45-nginx
cont-init: info: /etc/cont-init.d/45-nginx exited 0
cont-init: info: running /etc/cont-init.d/50-certbot
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Some challenges have failed.
Ask for help or search for solutions at https://community.letsencrypt.org. See the logfile /var/log/letsencrypt/letsencrypt.log or re-run Certbot with -v for more details.

das sieht mir so nicht richtig aus...

Link to comment
10 hours ago, Zeze21 said:

Was sind denn die Vor- und Nachteile wenn ich die ganzen Container (also auch Swag) als Custom laufen lasse?

jeder hat seine eigene ip, brauchst Dir keine Gedanken bzgl. port mappings von docker machen, kannst die Docker auch einfacher per name ansprechen, usw usw ... Geschmackssache ;)

 

6 hours ago, Zeze21 said:

das sieht mir so nicht richtig aus...

nope, tut es nicht ...

 

poste mal deine screens deiner forwardings und den docker Einstellungen zum Thema Netzwerk und Ports.

Link to comment

Das Problem hier war, dass ich only subdomains auf false hatte - auf true umgestellt schon gings.

 

Das Problem was ich jetzt habe ist, dass ich auf Nextcloud nur unzureichend komme:

Nach dem Einloggen kommt ein

504 Gateway Time-out

Der Windows Client scheint sich ohne probleme verbinden zu können

Link to comment
  • 2 weeks later...

Sorry für die lange Pause Hier mal die entsprechenden Infos:

auf nextcloud komme ich immer noch nicht - also wie gesagt nur zum loginscreen -  danach kommt 

504 Gateway Time-out

 

 

Swag läuft als br0 auf AAA.BBB.CCC.3 port 80 und 443 und ist erreichbar

Nextcloud läuft als br0 auf AAA.BBB.CCC.7 auf port 80 und 443 im Heimnetz erreichbar - wechselt dann natürlich direkt auf meine originale domain also cloud.irgendeinedom.ain

meine nectcloud.subdomain.conf:

## Version 2021/05/18
# make sure that your dns has a cname set for nextcloud
# assuming this container is called "swag", edit your nextcloud container's config
# located at /config/www/nextcloud/config/config.php and add the following lines before the ");":
#  'trusted_proxies' => ['swag'],
#  'overwrite.cli.url' => 'https://nextcloud.your-domain.com/',
#  'overwritehost' => 'nextcloud.your-domain.com',
#  'overwriteprotocol' => 'https',
#
# Also don't forget to add your domain name to the trusted domains array. It should look somewhat like this:
#  array (
#    0 => '192.168.0.1:444', # This line may look different on your setup, don't modify it.
#    1 => 'nextcloud.your-domain.com',
#  ),

server {
    listen 443 ssl;
    listen [::]:443 ssl;

    server_name cloud.*;

    include /config/nginx/ssl.conf;

    client_max_body_size 0;

    location / {
        include /config/nginx/proxy.conf;
        include /config/nginx/resolver.conf;
        set $upstream_app AAA.BBB.CCC.7;
        set $upstream_port 443;
        set $upstream_proto https;
        proxy_pass $upstream_proto://$upstream_app:$upstream_port;

        proxy_max_temp_file_size 2048m;
    }
}

meine config.php:

<?php
$CONFIG = array (
  'memcache.local' => '\\OC\\Memcache\\APCu',
  'datadirectory' => '/data',
  'instanceid' => 'komischerZahlenundBuchstabenHaufen',
  'passwordsalt' => 'längererkomischerZahlenundBuchstabenHaufen',
  'secret' => 'nochlängererkomischerZahlenundBuchstabenHaufen',
  'trusted_domains' => 
  array (
    0 => 'AAA.BBB.CCC.10:443',
    1 => 'cloud.irgendeinedom.ain',
  ),
  'trusted_proxies' => 
  array (
    0 => 'swag',
  ),
  'dbtype' => 'mysql',
  'version' => '24.0.0.12',
  'overwrite.cli.url' => 'https://cloud.irgendeinedom.ain/',
  'overwritehost' => 'cloud.irgendeinedom.ain',
  'overwriteprotocol' => 'https',
  'dbname' => 'nextcloud',
  'dbhost' => 'AAA.BBB.CCC.10:3306',
  'dbport' => '',
  'dbtableprefix' => 'oc_',
  'mysql.utf8mb4' => true,
  'dbuser' => 'nextcloud',
  'dbpassword' => 'IrgendeinPasswort',
  'installed' => true,
  'default_phone_region' => 'DE',
  'maintenance' => false,
  'loglevel' => 2,
);

Wobei AAA.BBB.CCC.10 mein Unraid Server ist...

müsste da ggfs noch ein 

2 => 'AAA.BBB.CCC.3:443',

ergänzt werden für Swag?

Danke schonmal!

Link to comment

Ich verstehe nicht ganz warum du lokale IPs zensierst, aber das mit dem Port ist in jedem Fall überflussig. Einfach nur die IP freigeben. Und natürlich die, die du nutzt, um auf Nextcloud zu kommen. Also die .7 und nicht irgendeine andere.

 

On 11/10/2022 at 8:00 PM, Zeze21 said:
overwrite.cli.url' => 'https://cloud.irgendeinedom.ain/',
  'overwritehost' => 'cloud.irgendeinedom.ain',
  'overwriteprotocol' => 'https',

Das solltest du alles mal rausnehmen. Damit die ganzen Weiterleitungen raus sind. Und dann die Frage ob du nur über die blanke IP von Nextcloud, also ohne Swag drauf kommst. Dazu über einen Inkognito Tab neu öffnen, da der Browser Weiterleitungen zwischenspeichert.

 

On 11/10/2022 at 8:00 PM, Zeze21 said:
set $upstream_app AAA.BBB.CCC.7;
        set $upstream_port 443;

Wozu nutzt du 443 von Container zu Container? Warum unterstützt deine Nextcloud überhaupt diesen Port? Der Original Container tut das nicht. Der kann nur Port 80.

 

On 11/10/2022 at 8:00 PM, Zeze21 said:

wechselt dann natürlich direkt auf meine originale domain also cloud.irgendeinedom.ain

Und wer leitet da um? Swag oder Nextcloud?

 

On 11/10/2022 at 8:00 PM, Zeze21 said:
  'trusted_proxies' => 
  array (
    0 => 'swag',
  ),

Was soll das sein? Hier steht klar, dass man da IP-Adressen eintragen muss:

https://docs.nextcloud.com/server/latest/admin_manual/configuration_server/reverse_proxy_configuration.html

 

Also die IP von Swag.

Link to comment
  • 2 weeks later...
On 11/13/2022 at 7:53 PM, mgutt said:

Ich verstehe nicht ganz warum du lokale IPs zensierst, aber das mit dem Port ist in jedem Fall überflussig. Einfach nur die IP freigeben. Und natürlich die, die du nutzt, um auf Nextcloud zu kommen. Also die .7 und nicht irgendeine andere.

Ich zensiere lieber zuviel als zu wenig :D Man könnte aus der IP Konfiguration schließen von welchem Hersteller mein Router ist ;) 

Wo genau meinst du das mit den Ports? in der Config.php? oder in der nextcloud.subdomain?

On 11/13/2022 at 7:53 PM, mgutt said:

Das solltest du alles mal rausnehmen. Damit die ganzen Weiterleitungen raus sind. Und dann die Frage ob du nur über die blanke IP von Nextcloud, also ohne Swag drauf kommst. Dazu über einen Inkognito Tab neu öffnen, da der Browser Weiterleitungen zwischenspeichert.

 

Das habe ich getan (siehe am Ende des Posts) egal ob ich über meine Domain oder die lokale IP zugreife es kommt immer

504 Gateway Time-out
nginx

 

On 11/13/2022 at 7:53 PM, mgutt said:

Wozu nutzt du 443 von Container zu Container? Warum unterstützt deine Nextcloud überhaupt diesen Port? Der Original Container tut das nicht. Der kann nur Port 80.

Weil die Anleitung die ich damals benutzt habe dies auch getan hat, ich denke da wird es sehr viele geben die das genau so konfiguriert haben, die Anleitung stammt zumindest von Spaceinvader One. 

 

On 11/13/2022 at 7:53 PM, mgutt said:

Und wer leitet da um? Swag oder Nextcloud?

Verzeih mir, die Frage verwirrt mich. Swag macht ja nur folgendes:

Anfrage von cloud* kommt -> wird weitergeleitet auf AAA.BBB.CCC.7

Bisher hat nextcloud überprüft kommt die Anfrage über cloud* wenn nein wird auf cloud* umgeleitet.

 

Meine aktuelle config.php

<?php
$CONFIG = array (
  'memcache.local' => '\\OC\\Memcache\\APCu',
  'datadirectory' => '/data',
  'instanceid' => 'Neinstanz',
  'passwordsalt' => 'LustigesPasswort',
  'secret' => 'NochlustigeresGeheimnis',
  'trusted_domains' => 
  array (
    0 => 'AAA.BBB.CCC.*',
    1 => 'cloud.irgendeinedom.ain',
  ),
  'trusted_proxies' => 
  array (
    0 => 'AAA.BBB.CCC.0/24',
    1 => 'cloud.irgendeine.dom.ain',
  ),
  'dbtype' => 'mysql',
  'version' => '24.0.0.12',
  'dbname' => 'nextcloud',
  'dbhost' => 'AAA.BBB.CCC.10:3306',
  'dbport' => '',
  'dbtableprefix' => 'oc_',
  'mysql.utf8mb4' => true,
  'dbuser' => 'nextcloud',
  'dbpassword' => 'EinanderesPasswort',
  'installed' => true,
  'default_phone_region' => 'DE',
  'maintenance' => false,
  'loglevel' => 2,
);

Die nextcloud.subdomain habe ich noch nicht verändert, weil ich mir auch nicht sicher bin wie, bzw was genau.

Im übrigen sind die Ports in der Sample.nextcloud.subdomain enthalten. Gerade für nicht so versierte User wie ich anscheinend einer bin, ist es etwas verwirrend wenn das explizit in der Beispielkonfiguration, die explizit für dieses eine Programm angelegt wurde, verwendet wird. Nicht falsch verstehen, aber das ist doch komisch dass es in der Beispielkonfiguration explizit so gemacht wird und du sagst, dass der Port gar nicht unterstützt wird. Das soll keine Kritik sein, das verwirrt mich nur extrem.

 

Quote

Dann verlasst ihr euch darauf, dass ein DNS zu dem Hostnamen die korrekte Domain zurückgibt. Kann man machen, aber ich würde eher das komplette lokale IP Netz freigeben als einen Hostnamen.

Darf man fragen warum du das tun würdest? Hat es sicherheitstechnische Gründe?

 

Ich würde ja auch alternativ Nextcloud komplett neu installieren, wenn ich meine Daten (und die der anderen User - ok ist nur ein anderer) einfach retten könnte :( 

 

 

Edited by Zeze21
Link to comment
18 hours ago, Zeze21 said:

Wo genau meinst du das mit den Ports? in der Config.php?

Jo

18 hours ago, Zeze21 said:

. Swag macht ja nur folgendes:

Anfrage von cloud* kommt -> wird weitergeleitet auf AAA.BBB.CCC.7

Jo stimmt. Dann leitet wohl Nextcloud um.

 

18 hours ago, Zeze21 said:

Nicht falsch verstehen, aber das ist doch komisch dass es in der Beispielkonfiguration explizit so gemacht wird und du sagst, dass der Port gar nicht unterstützt wird

Wird er, aber man schränkt damit die Nutzung explizit auf diesen einen Port ein, was verhindert, dass man den Port des Containers ändert und es macht halt keinen Sinn, weil Nextcloud eh nur auf bestimmten Ports erreichbar ist und der Proxy nur über einen Port mit Nextcloud spricht:

https://docs.nextcloud.com/server/latest/admin_manual/configuration_server/config_sample_php_parameters.html#default-parameters

Quote

the exact hostname with permitted port, e.g. demo.example.org:443. This disallows all other ports on this host

 

 

 

18 hours ago, Zeze21 said:

Darf man fragen warum du das tun würdest? Hat es sicherheitstechnische Gründe?

Wenn du example.com aufrufst, muss dein PC erst einen DNS Server nach der IP von dieser Domain fragen. Rufst du direkt 1.1.1.1 auf, fällt diese zusätzliche Anfrage weg. Davon abgesehen steht in der Doku nichts davon, dass man überhaupt Hostnamen angeben kann:

https://docs.nextcloud.com/server/latest/admin_manual/configuration_server/reverse_proxy_configuration.html

 

10 hours ago, Zeze21 said:

Nextcloud ist zwar bei mir immer noch sehr sehr langsam aber es funktioniert jetzt immerhin!!!!

 

 

Link to comment

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.